我有一个VisualStudio2012库项目(VC++),如果某个SDK可用,它包括某些类。我在属性表中通过msbuild Condition实现了这一点:
<Choose>
<When Condition="Exists('C:\OFED_SDK\')">
<PropertyGroup>
<OfedSdkDir>C:\OFED_SDK\</OfedSdkDir>
</PropertyGroup>
</When>
</Choose>
[...]
<ItemDefinitionGroup Condition="$(OfedSdkDir) != ''">
<ClCompile>
<AdditionalIncludeDirectories>$(OfedSdkDir)Inc\; %(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>HAVE_OFED_SDK; %(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
[...]某些功能只有在定义HAVE_OFED_SDK时才可用。这工作得很好。
该解决方案还包含几个用于测试库项目的项目。有条件编译的类的测试在一个单独的项目中。
我的问题是:我可以根据上面提到的条件(Condition="$(OfedSdkDir) != ''是否是true来构建这个项目吗?如果是这样的话,我怎么做呢?我需要一个解决方案,也可以在从VS构建时工作。
编辑:我知道马丁提出的解决方案,但我正在寻找一种以编程方式工作的解决方案(即不允许用户通过GUI启用“错误”配置)。
编辑:我发现我可以将(Condition="$(OfedSdkDir) != ''添加到源文件的ClCompile中,这几乎实现了我想要的,但仍然运行项目的构建过程。
发布于 2014-04-06 12:59:38
只需设置不试图构建要排除的相关项目的不同解决方案配置即可。
例如,将其称为“Release OFED”,并取消在该配置中编译的那些项目。
https://stackoverflow.com/questions/22894313
复制相似问题