【发布时间】:2014-04-06 22:19:33
【问题描述】:
如果某个 SDK 可用,我有一个包含某些类的 Visual Studio 2012 库项目 (VC++)。我通过属性表中的 msbuild Conditions 实现了这一点:
<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 提出的解决方案,但我正在寻找一种以编程方式工作的解决方案,即不允许用户通过 GUI 启用“错误”配置.
编辑:我发现我可以将(Condition="$(OfedSdkDir) != '' 添加到源文件的ClCompile 中,这几乎可以实现我想要的,但仍然运行项目的构建过程。
【问题讨论】:
标签: visual-studio-2012 msbuild