我试图让Visual Studio 2013的msbuild .vcxproj根据.cpp文件名自动将某些.cpp项目文件标记为<ExcludedFromBuild>true</ExcludedFromBuild>
。
我的目标是允许我的程序(~100个开发人员,~1000 vcxproj)轻松支持仅调试单元测试代码的编译,这些代码将全部写入具有_utest.cpp后缀的.cpp文件中。在_utest.cpp中结束的任何.cpp文件都将自动从发布版本中排除,并且程序员可以在Visual Studio的解决方案资源管理器中看到它们切换到发布解决方案配置时。
我已经能够阻止在Release中构建_utest.cpp后缀文件,方法是将其添加到我的共享.props文件中
<Target Name="Remove _utest.cpp" BeforeTargets="ClCompile" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ItemGroup>
<ClCompile Remove="*_utest.cpp" />
</ItemGroup>
</Target>
但是在解决方案资源管理器中没有给出一个可视指示符,表明这些文件不属于Release版本。
我已经在ItemDefinitionGroup中尝试了一个基于%(身份)的条件但是没有工作
<ItemDefinitionGroup Condition="'%(Identity)'=='throttle_utest.cpp'">
<ClCompile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
</ItemDefinitionGroup>
(Visual Studio拒绝加载此错误&#34;不允许在位置1引用内置元数据标识&#34;)
或
<ItemDefinitionGroup Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(%(Identity), '_utest\.cpp$'))">
<ClCompile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
</ItemDefinitionGroup>
(Visual Studio加载了此更改,但没有做任何事情从构建中排除匹配的文件)。
有没有办法可以根据文件名有条件地排除文件,并在解决方案资源管理器中获取可视指示符?
答案 0 :(得分:0)
我认为这样的事情应该有效。
在<Project>
标记下方。
<ItemGroup Condition="'$(Configuration)'!='Debug'">
<ClCompile Include="*_utest.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
</ItemGroup>
答案 1 :(得分:0)
这对我有用(完全在VS2013 UI中完成-右键单击源文件的属性,然后为Excluded from build: True
配置选择Release
):
<ClCompile Include="foo_utest.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
注意:根据https://docs.microsoft.com/en-us/cpp/ide/vcxproj-file-structure?view=vs-2017:
Visual C ++项目系统当前不支持项目项中的通配符。 例如,不支持此功能:
<ClCompile Include="*.cpp"/>
因此,每个文件应单独排除。