2014-07-01 53 views
2

我試圖讓Visual Studio 2013的msbuild .vcxproj根據.cpp文件名自動將某些.cpp項目文件標記爲<ExcludedFromBuild>true</ExcludedFromBuild>根據文件名有條件地排除VisualStudio 2013 C++項目中的文件

我的目標是允許我的程序(~100個開發人員,〜1000 vcxproj)輕鬆地支持僅調試單元測試代碼的調試,這些代碼都將被編寫爲具有_utest.cpp後綴的.cpp文件。以_utest.cpp結尾的任何.cpp文件都將自動從發佈版本中排除,程序員可以在Visual Studio的解決方案資源管理器中看到它們切換到發佈解決方案配置時。

我已經能夠防止_utest.cpp後綴的文件,從建立在Release加入該到我的共享文件.props

<Target Name="Remove _utest.cpp" BeforeTargets="ClCompile" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> 
    <ItemGroup> 
    <ClCompile Remove="*_utest.cpp" /> 
    </ItemGroup> 
</Target> 

,但並沒有給在Solution Explorer視覺指示這些文件不是發佈版本的一部分。

我已經嘗試過在ItemDefinitionGroup(標識)的條件是基於%,但沒有奏效

<ItemDefinitionGroup Condition="'%(Identity)'=='throttle_utest.cpp'"> 
    <ClCompile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> 
     <ExcludedFromBuild>true</ExcludedFromBuild> 
    </ClCompile> 
</ItemDefinitionGroup> 

(Visual Studio中拒絕加載這個有錯誤「的參考建在位置1 -in元身份是不允許「)

<ItemDefinitionGroup Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(%(Identity), '_utest\.cpp$'))"> 
    <ClCompile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> 
     <ExcludedFromBuild>true</ExcludedFromBuild> 
    </ClCompile> 
</ItemDefinitionGroup> 

(Visual Studio中加載了這種變化,但什麼也沒做,以排除匹配的文件從建築物)。

有沒有一種方法可以有條件地排除基於文件名的文件並在解決方案資源管理器中獲取可視指示器?

回答

0

我覺得像這樣的東西應該工作。 正好在<Project>標籤下。

<ItemGroup Condition="'$(Configuration)'!='Debug'"> 
    <ClCompile Include="*_utest.cpp"> 
     <ExcludedFromBuild>true</ExcludedFromBuild> 
    </ClCompile> 
</ItemGroup> 
+1

感謝您的回覆,但沒有奏效。我試着用一個foo_utest.cpp測試項目,以及你的ItemGroup從調試版本中排除* _utest.cpp,VS2013(update 3)不再加載我的項目。我一直在''foo_utest.cpp「項目下已經存在過濾器」源文件「.' – kkost

相關問題