在MSBuild中,您可以为所有文件设置一次文件属性吗?

时间:2012-11-09 22:07:33

标签: msbuild

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

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

ie-

我有Win32Math.cpp& Win64Math.cpp。我只想在构建Win32平台时编译Win32Math。类似于Win64。

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

这可能吗?

2 个答案:

答案 0 :(得分:1)

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

这显示了如何将属性函数与项元数据一起使用。 Using Item functions on metadata values

答案 1 :(得分:1)

有可能,但您无法在<ItemDefinitionGroup>中测试内在项元数据。唯一已知的方法是使用目标。

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

甚至更好:

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