根据文件名有条件地从VisualStudio 2013 C ++项目中排除文件

时间:2014-07-01 15:48:30

标签: visual-c++ msbuild

我试图让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加载了此更改,但没有做任何事情从构建中排除匹配的文件)。

有没有办法可以根据文件名有条件地排除文件,并在解决方案资源管理器中获取可视指示符?

2 个答案:

答案 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"/>

因此,每个文件应单独排除。