我有一个Visual Studio 2012库项目(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构建时也能正常工作的解决方案。
编辑:我知道Martin提出的解决方案,但我正在寻找一种以编程方式运行的解决方案,即不允许用户启用错误&#34 ;通过GUI配置。
编辑:我发现我可以将(Condition="$(OfedSdkDir) != ''
添加到源文件的ClCompile
,这几乎可以达到我想要的效果,但仍会运行项目的构建过程
答案 0 :(得分:1)
只需设置一个不同的解决方案配置,但不会尝试构建您要排除的相关项目。
例如,将其称为&#34; Release-No-OFED&#34;并取消勾选那些在该配置中编译的项目。