c++ - 为多个项目和配置有效地使用 Visual Studio 项目属性

我一直使用内置 GUI 支持的 Visual Studios 来配置我的项目,通常使用属性表,以便多个项目使用一个公共(public)集。

我对此的主要提示之一是管理多个项目、配置和平台。如果你只是用主 GUI 做所有事情(右键单击项目 -> 属性),它很快就会变得一团糟,难以维护并且容易出现错误(例如未能正确定义某些宏,或使用错误的运行时库等)。处理不同的人将依赖库放在不同的地方(例如我的都住在“C:\Libs\[C,C++]\[lib-name]\”)的事实,然后经常管理这些库的不同版本同样不同(发布、调试、x86、x64 等)也是一个大问题,因为它使在新系统上设置它的时间大大复杂化,然后存在版本控制问题和保持每个人的路径分开.. .

属性表使这更好一些,但我不能让一张表具有针对不同配置和平台的单独设置(下拉框显示为灰色),导致我有很多表,如果以正确的顺序继承会做什么我想要(“x86”、“x64”、“debug”、“release”、“common”、“directories”(通过定义像 BoostX86LibDir 这样的用户宏来处理前面提到的依赖问题)等)如果继承错误顺序(例如“x64”和“debug”之前的“common”)会导致尝试链接不正确的库版本或错误命名输出等问题...

我想要的是一种处理所有这些分散依赖项并设置一组“规则”的方法,这些“规则”供我在解决方案中的所有项目使用,例如将输出库命名为“mylib-[vc90,vc100] -[x86,x64][-d].lib",无需为每个单独的项目、配置和平台组合执行所有这些操作,然后让它们全部正确同步。

我知道迁移到创建所需文件的完全不同的系统(例如 CMake),但是这会使其他地方的事情变得复杂,因此即使是简单的任务(例如向项目中添加新文件)也需要在其他地方进行额外的更改,这不是两者我都非常满意,除非有一些与 VS2010 集成的东西可以跟踪这些变化。

最佳答案

我刚刚发现了一些我认为不可能的东西(它没有被 GUI 公开),这有助于使属性表更加有用。项目属性文件中许多标签的“条件”属性,也可以在.props文件中使用!

我只是将以下内容放在一起作为测试,它运行良好,完成了 5 个(通用、x64、x86、调试、发布)单独的属性表的任务!

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Label="UserMacros">
    <!--debug suffix-->
    <DebugSuffix Condition="'$(Configuration)'=='Debug'">-d</DebugSuffix>
    <DebugSuffix Condition="'$(Configuration)'!='Debug'"></DebugSuffix>
    <!--platform-->
    <ShortPlatform Condition="'$(Platform)' == 'Win32'">x86</ShortPlatform>
    <ShortPlatform Condition="'$(Platform)' == 'x64'">x64</ShortPlatform>
    <!--toolset-->
    <Toolset Condition="'$(PlatformToolset)' == 'v90'">vc90</Toolset>
    <Toolset Condition="'$(PlatformToolset)' == 'v100'">vc100</Toolset>
  </PropertyGroup>
  <!--target-->
  <PropertyGroup>
    <TargetName>$(ProjectName)-$(Toolset)-$(ShortPlatform)$(DebugSuffix)</TargetName>
  </PropertyGroup>
</Project>

唯一的问题是属性 GUI 无法处理它,使用上述属性表的项目只会报告目标的默认继承值,例如“$(ProjectName)”。

https://stackoverflow.com/questions/3502530/

相关文章:

android - 如何使用 Ant 构建 Android 示例项目? build.xml 不存在

iphone - 如何在 Xcode 中减少构建时间/加快编译时间?

c++ - #将所有 .cpp 文件包含在一个编译单元中?

c# - Await 运算符只能在 Async 方法中使用

c# - 使用 Visual Studio 2010 从命令行构建 C# 解决方案

java - 何时使用 gradle.properties 与 settings.gradle?

android - 多个 dex 文件定义 Lorg/apache/cordova/BuildHel

visual-studio-2010 - Visual Studio 2010 说在我更改源文件后构

Xcode 构建警告 - 目标完整性 - 配置文件仅针对 ProjectnameTests 目标到期

visual-studio - 为什么在 Visual Studio 中执行之前 F5 不重建项目?