【发布时间】:2014-08-22 06:18:52
【问题描述】:
我正在尝试让 Visual Studio 2013 的 msbuild .vcxproj 根据 .cpp 文件名自动将某些 .cpp 项目文件标记为 <ExcludedFromBuild>true</ExcludedFromBuild>。
我的目标是让我的程序(约 100 名开发人员,约 1000 名 vcxproj)轻松支持仅调试单元测试代码的编译,这些代码都将编写在具有 _utest.cpp 后缀的 .cpp 文件中。任何以 _utest.cpp 结尾的 .cpp 文件都将自动从发布版本中排除,当程序员切换到发布解决方案配置时,他们可以在 Visual Studio 的解决方案资源管理器中看到。
通过将其添加到我的共享 .props 文件中,我已经能够阻止 _utest.cpp 后缀文件在 Release 中构建
<Target Name="Remove _utest.cpp" BeforeTargets="ClCompile" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ItemGroup>
<ClCompile Remove="*_utest.cpp" />
</ItemGroup>
</Target>
但这并没有在解决方案资源管理器中提供视觉指示,表明文件不是发布版本的一部分。
我已经在 ItemDefinitionGroup 中尝试了一个基于 %(Identity) 的条件,但没有成功
<ItemDefinitionGroup Condition="'%(Identity)'=='throttle_utest.cpp'">
<ClCompile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
</ItemDefinitionGroup>
(Visual Studio 拒绝加载这个错误“不允许在位置 1 引用内置元数据标识”)
或
<ItemDefinitionGroup Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(%(Identity), '_utest\.cpp$'))">
<ClCompile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
</ItemDefinitionGroup>
(Visual Studio 已加载此更改,但没有采取任何措施从构建中排除匹配的文件)。
有没有一种方法可以根据文件名有条件地排除文件并在解决方案资源管理器中获得可视指示器?
【问题讨论】:
标签: visual-c++ msbuild