0

我正在尝试为 VS2010/MSBuild 构建设置一个简单的规则,以减少项目管理。它与“ExcludedFromBuild”属性有关。

规则是,如果文件名中没有平台名称,则 ExcludedFromBuild = true。

IE-

我有 Win32Math.cpp 和 Win64Math.cpp。我只希望在构建 Win32 平台时编译 Win32Math。Win64 类似。

为每个文件设置这个很容易,但有点乏味。我们有 4 个目标平台,每次添加文件时,我们都必须更新每个目标的属性。我希望规则是全局的,所以每次添加平台文件时,我都不必每次都进行设置。

这可能吗?

4

2 回答 2

1

It is possible, but you can't test intrinsic item metadata in <ItemDefinitionGroup>s. The only known way is to use a target.

<Target Name="RemoveNonPlatformItems" BeforeTargets="ClCompile">
    <ItemGroup>
        <ClCompile>
            <ExcludedFromBuild Condition="!$([System.String]::Copy(%(FileName)).Contains($(Platform)))">true</ExcludedFromBuild>
        </ClCompile>
    </ItemGroup>
</Target>

Or even better:

<Target Name="RemoveNonPlatformItems" BeforeTargets="ClCompile">
    <ItemGroup>
        <ClCompile Remove="%(Identity)" Condition="!$([System.String]::Copy(%(FileName)).Contains($(Platform)))" />
    </ItemGroup>
</Target>
于 2013-02-26T12:47:02.537 回答
1

您可以为这种事情使用项目定义组http://msdn.microsoft.com/en-us/library/bb629392.aspx,但我不太了解您的具体情况。您可能需要根据与平台匹配的项目文件名来设置元数据。

这显示了如何将属性函数与项目元数据一起使用。对元数据值使用 Item 函数

于 2012-11-09T22:56:32.720 回答