【问题标题】:Conditionally exclude project from Visual Studio build有条件地从 Visual Studio 构建中排除项目
【发布时间】: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


    【解决方案1】:

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

    例如,将其命名为“Release-No-OFED”并取消勾选那些项目,使其不再在该配置中编译。

    【讨论】:

    • 我知道这种可能性,但我正在寻找一个不能在 UI 中“覆盖”的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多