我一直使用 Visual Studio 内置的 GUI 支持来配置我的项目,通常使用属性表,以便多个项目将使用通用集。
我对此的主要抱怨之一是管理多个项目、配置和平台。如果您只是使用主 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)”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)