由於Visual Studio項目由MSBuild處理,因此可以根據您的需求進行自定義。
導入自定義目標項目文件到您現有的.vcxproj可能是這個樣子:
<!--
...
way to the end of your .vcxproj file
-->
<!-- start of custom import part -->
<Import Project=".\YourInternal.targets" Condition="Exists('.\YourInternal.targets')" />
<!-- end of custom import part -->
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
你.vcxproj將只包含的項目/配置的子集,你希望提供給客戶/命令 - 與您的內部構建過程相關的所有內容都將包含在一個或多個.targets項目文件中,該文件將被簡單地從您的客戶中刪除。
例如,如果你有一個內部的Custom Build Step \ Execute Before \ Clean
,你會從你的。vcxproj文件,並將其添加到您的YourInternal.targets
項目文件:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<CustomBuildBeforeTargets>Clean</CustomBuildBeforeTargets>
</PropertyGroup>
</Project>
如果你有需要延長內部處理項目的集合,你可以在你的.targets其他項目串連基本設置你的.vcxproj的文件(S):
.vcxproj
...
<ItemGroup>
<ClInclude Include="Header.h" />
</ItemGroup>
...
.targets
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<!-- includes to items definded in your .vcxproj -->
<ClInclude Include="@(ClInclude)" />
<!-- add more items here -->
<ClInclude Include="Foo.h" />
<ClInclude Include="Bar.h" />
</ItemGroup>
</Project>
這個例子只是通過MSBuild命令擴展你的.vcxproj來實現你可以實現的目標。
您是否已經研究過有條件地導入子項目文件(MSBuild處理這種東西的方式)? – Filburt
@Filburt我會怎麼做?我試過尋找關於子項目的文檔,但是我找不到很多 - 是某種隱藏功能(我來自一個Makefile世界,所以我缺乏通用性,當涉及到VS和MSBuild時) – celavek