共用方式為


自訂 C++ 組建

您可以使用 Directory.Build.propsDirectory.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.propsMicrosoft.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,在命令列上設定一或兩個屬性 ForceImportBeforeCppTargetsForceImportAfterCppTargets

msbuild /p:ForceImportBeforeCppTargets="C:\build\config\Custom.Before.Microsoft.Cpp.Targets" MyCppProject.vcxproj

對於全域設定 (例如,組建伺服器上平台的所有 C++ 組建),有兩種方法。 首先,您可以使用一律設定的系統內容變數來設定這些屬性。 此技術可行是因為 MSBuild 一律會讀取環境並為所有環境變數建立 (或覆寫) 屬性。