有条件地从Visual Studio构建中排除项目

时间:2014-04-06 12:53:29

标签: visual-studio-2012 msbuild

我有一个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,这几乎可以达到我想要的效果,但仍会运行项目的构建过程

1 个答案:

答案 0 :(得分:1)

只需设置一个不同的解决方案配置,但不会尝试构建您要排除的相关项目。

例如,将其称为&#34; Release-No-OFED&#34;并取消勾选那些在该配置中编译的项目。