自訂 C++ 組建
您可以使用 Directory.Build.props 和 Directory.Build.targets 自訂通用父資料夾下的所有 C++ 專案。 請參閱依資料夾自訂。 此外,C++ 專案還提供下列擴充點。 您可使用屬性指定要在 Microsoft.Cpp.* 檔案之前/之後自動匯入的 .props
或 .targets
檔案:
- ForceImportAfterCppDefaultProps
- ForceImportBeforeCppProps
- ForceImportAfterCppProps
- ForceImportBeforeCppTargets
- ForceImportAfterCppTargets
這些匯入可控制相依於其他屬性之屬性定義,或相依於其他目標之目標的排序。 .vcxproj
中的匯入排序如下所示:
vcxproj
Microsoft.Cpp.default.props
Microsoft.Common.props
Directory.Build.props
Microsoft.Cpp.props
Microsoft.Cpp.targets
Microsoft.Common.targets
Directory.Build.targets
請參閱 .vcxproj 和.props 檔案結構。 如果您需要定義使用 Microsoft.Cpp.default.props 或 Microsoft.Cpp.props 所定義之其他屬性的屬性,可以建立另一個 .props
檔案 (例如 MyProps.props),並定義在 Directory.Build.props
指向它的 ForceImportAfterCppProps
屬性:
<PropertyGroup>
<ForceImportAfterCppProps>$(MSBuildThisFileDirectory)\MyProps.props</ForceImportAfterCppProps>
</PropertyGroup>
MyProps.props 會在 Microsoft.Cpp.props 的尾端自動匯入。
自訂所有 C++ 組建
不建議自訂 Visual Studio 安裝,因為不容易追蹤這類自訂項目,但是果您要擴充 Visual Studio 來自訂特定平台的 C++ 組建,您可為每個平台建立 .targets
檔案,並將其放在這些平台的適當匯入資料夾中做為 Visual Studio 延伸模組的一部分。
Win32 平台的 .targets
檔案 (Microsoft.Cpp.Win32.targets) 包含下列 Import
元素:
<Import Project="$(VCTargetsPath)\Platforms\Win32\ImportBefore\*.targets"
Condition="Exists('$(VCTargetsPath)\Platforms\Win32\ImportBefore')"
/>
相同檔案結尾附近有類似的元素:
<Import Project="$(VCTargetsPath)\Platforms\Win32\ImportAfter\*.targets"
Condition="Exists('$(VCTargetsPath)\Platforms\Win32\ImportAfter')"
/>
*%ProgramFiles32%\MSBuild\Microsoft.Cpp\v{version}\Platforms* 中的其他目標平台有類似的匯入元素。
一旦根據平台將 .targets
檔案放在適當的 ImportAfter
資料夾中,MSBuild 會將檔案匯入該平台的每個 C++ 組建中。 如有需要,您可以將多個 .targets
檔案放在該處。
使用 Visual Studio 擴充性時,可以進一步自訂,例如定義新平台。 如需詳細資訊,請參閱 C++ 專案擴充性。
在命令列上指定自訂匯入
針對您想要針對 C++ 專案的特定組建包含的自訂 .targets
,在命令列上設定一或兩個屬性 ForceImportBeforeCppTargets
和 ForceImportAfterCppTargets
。
msbuild /p:ForceImportBeforeCppTargets="C:\build\config\Custom.Before.Microsoft.Cpp.Targets" MyCppProject.vcxproj
對於全域設定 (例如,組建伺服器上平台的所有 C++ 組建),有兩種方法。 首先,您可以使用一律設定的系統內容變數來設定這些屬性。 此技術可行是因為 MSBuild 一律會讀取環境並為所有環境變數建立 (或覆寫) 屬性。