Share via


C++ 專案的 MSBuild 內部項目

當您在 IDE 中設定專案屬性,然後儲存專案時,Visual Studio 會將專案設定寫入至您的專案檔。 專案檔包含您專案唯一的設定。 不過,它不包含建置專案所需的所有設定。 專案檔包含包含 Import 其他 支援檔案網路的專案。 支援檔案包含建置專案所需的其餘屬性、目標和設定。

支援檔案中大部分的目標和屬性的唯一用途皆為實作建置系統。 本文討論您可以在 MSBuild 命令列上指定的實用目標和屬性。 若要探索更多目標和屬性,請瀏覽支援檔案目錄中的檔案。

支援檔案目錄

根據預設,主要的 Visual Studio 支援檔案會位於下列目錄中。 這項資訊是版本特定的。

Visual Studio 2022 和 2019

  • %VSINSTALLDIR%MSBuild\Microsoft\VC\<version>\

    包含目標所使用的主要目標檔案 ( .targets ) 和屬性檔 ( .props )。 根據預設,宏會 $(VCTargetsPath) 參考這個目錄。 占 <version> 位符是指 Visual Studio 版本:適用于 Visual Studio 2022 的 v170、Visual Studio 2019 的 v160 或 Visual Studio 2017 的 v150。

  • %VSINSTALLDIR%MSBuild\Microsoft\VC\<version>\Platforms\<platform>\

    包含平台特定的目標和屬性檔案,會覆寫其上層目錄中的目標和屬性。 此目錄也包含一個 DLL,會定義此目錄中的目標所使用的工作。 占 <platform> 位符代表 ARM、ARM64、Win32 或 x64 子目錄。

  • %VSINSTALLDIR%MSBuild\Microsoft\VC\<version>\Platforms\<platform>\PlatformToolsets\<toolset>\

    包含使用指定的 <toolset> ,讓組建能夠產生 C++ 應用程式的目錄。 占 <platform> 位符代表 ARM、ARM64、Win32 或 x64 子目錄。 占 <toolset> 位符代表工具組子目錄。

Visual Studio 2017

  • %VSINSTALLDIR%Common7\IDE\VC\VCTargets\

    包含目標所使用的主要目標檔案 ( .targets ) 和屬性檔 ( .props )。 根據預設,宏會 $(VCTargetsPath) 參考這個目錄。

  • %VSINSTALLDIR%Common7\IDE\VC\VCTargets\Platforms\<platform>\

    包含平台特定的目標和屬性檔案,會覆寫其上層目錄中的目標和屬性。 此目錄也包含一個 DLL,會定義此目錄中的目標所使用的工作。 占 <platform> 位符代表 ARM、ARM64、Win32 或 x64 子目錄。

  • %VSINSTALLDIR%Common7\IDE\VC\VCTargets\Platforms\<platform>\PlatformToolsets\<toolset>\

    包含使用指定的 <toolset> ,讓組建能夠產生 C++ 應用程式的目錄。 占 <platform> 位符代表 ARM、Win32 或 x64 子目錄。 占 <toolset> 位符代表工具組子目錄。

Visual Studio 2015 和更早版本

  • <drive>:\Program Files[ (x86)]\MSBuild\Microsoft.Cpp\v4.0\<version>\

    包含目標所使用的主要目標檔案 ( .targets ) 和屬性檔 ( .props )。 根據預設,$(VCTargetsPath) 巨集會參考這個目錄。

  • <drive>:\Program Files[ (x86)]\MSBuild\Microsoft.Cpp\v4.0\<version>\Platforms\<platform>\

    包含平台特定的目標和屬性檔案,會覆寫其上層目錄中的目標和屬性。 此目錄也包含一個 DLL,會定義此目錄中的目標所使用的工作。 占 <platform> 位符代表 ARM、Win32 或 x64 子目錄。

  • <drive>:\Program Files[ (x86)]\MSBuild\Microsoft.Cpp\v4.0\<version>\Platforms\<platform>\PlatformToolsets\<toolset>\

    包含使用指定的 <toolset> ,讓組建能夠產生 C++ 應用程式的目錄。 占 <version> 位符為 V110 for Visual Studio 2012、V120 for Visual Studio 2013 和 V140 for Visual Studio 2015。 占 <platform> 位符代表 ARM、Win32 或 x64 子目錄。 占 <toolset> 位符代表工具組子目錄。 例如,它是使用 Visual Studio 2015 工具組建置 Windows 應用程式的 v140。 或者,v120_xp使用 Visual Studio 2013 工具組為 Windows XP 建置。

  • <drive>:\Program Files[ (x86)]\MSBuild\Microsoft.Cpp\v4.0\Platforms\<platform>\PlatformToolsets\<toolset>\

    讓組建產生 Visual Studio 2008 或 Visual Studio 2010 應用程式的路徑不包含 <version> 。 在這些版本中, <platform> 預留位置代表 Itanium、Win32 或 x64 子目錄。 占 <toolset> 位符代表 v90 或 v100 工具組子目錄。

支援檔案

支援檔案目錄包含具有下列副檔名的檔案:

副檔名 描述
.targets 包含 Target XML 元素,會指定目標所執行的工作。 也可能包含 PropertyGroupItemGroupItemDefinitionGroup 和使用者定義的 Item 元素,用來檔案和命令列選項指派給工作參數。

如需詳細資訊,請參閱 Target 元素 (MSBuild)
.props 包含 Property Group 和使用者定義的 Property XML 元素,會指定在建置期間使用的檔案和參數設定。

也可能包含指定其他設定的 ItemDefinitionGroup 和使用者定義 Item XML 元素。 在專案定義群組中定義的專案類似于屬性,但無法從命令列存取。 Visual Studio 專案檔通常會使用項目來代表設定,而不是使用屬性。

如需詳細資訊,請參閱 Element (MSBuild) ItemDefinitionGroup Element (MSBuild) Item Element (MSBuild) ItemGroup
.xml 包含宣告和初始化 IDE 使用者介面元素的 XML 元素。 例如,屬性工作表、屬性頁、文字方塊控制項和 listbox 控制項。

這些 .xml 檔案直接支援 IDE,而不是 MSBuild。 不過,IDE 屬性的值會指派給組建屬性和項目。

大部分 .xml 的檔案都位於地區設定特定的子目錄中。 例如,英文-美國區域的檔案位於 $(VCTargetsPath)\1033\ 中。

使用者目標和屬性

若要有效地使用 MSBuild,它有助於知道哪些屬性和目標很有用且相關。 大部分的屬性和目標都有助於實作 Visual Studio 建置系統,且與使用者無關。 本節說明值得了解的使用者導向屬性和目標。

PlatformToolset 屬性

PlatformToolset 屬性會決定要在組建中使用的 MSVC 工具組。 依預設會使用目前的工具組。 設定這個屬性時,其值會與常值字串串連,以形成路徑。 此目錄包含建置特定平臺專案所需的屬性和目標檔案。 必須安裝平台工具組,才能使用該平台工具組版本來建置。

例如,將 PlatformToolset 屬性設為 v140,會使用 Visual Studio 2015 工具和程式庫來建置您的應用程式:

msbuild myProject.vcxproj /p:PlatformToolset=v140

PreferredToolArchitecture 屬性

PreferredToolArchitecture 屬性會決定要在組建中使用 32 位元還是 64 位元編譯器和工具。 此屬性不會影響輸出平臺架構或組態。 根據預設,如果未設定此屬性,MSBuild 會使用 x86 版本的編譯器和工具。

例如,將 PreferredToolArchitecture 屬性設為 x64,會使用 64 位元編譯器和工具來建置您的應用程式:

msbuild myProject.vcxproj /p:PreferredToolArchitecture=x64

UseEnv 屬性

根據預設,目前專案的平臺特定設定會覆寫 PATHINCLUDELIBLIBPATHCONFIGURATIONPLATFORM 環境變數。 將 UseEnv 屬性設定為 true ,以確保不會覆寫環境變數。

msbuild myProject.vcxproj /p:UseEnv=true

目標

Visual Studio 支援檔案中有數百個目標。 不過,大部分都是使用者可忽略的系統導向目標。 大部分的系統目標前面都會加上底線 ( _ ),或具有開頭 PrepareFor 為 、、 ComputeBeforeAfterPrePost 的名稱。

下表列出數個有用的使用者導向目標。

目標 描述
BscMake 執行 Microsoft Browse Information Maintenance Utility 工具 bscmake.exe
Build 建置專案。

此目標是專案的預設值。
ClCompile 執行 MSVC 編譯器工具 。 cl.exe
Clean 刪除暫存檔和中繼組建檔案。
Lib 執行 Microsoft 32 位程式庫管理員工具 。 lib.exe
Link 執行 MSVC 連結器工具 。 link.exe
ManifestResourceCompile 從資訊清單擷取資源清單,然後執行 Microsoft Windows 資源編譯器工具 。 rc.exe
Midl 執行 Microsoft Interface Definition Language (MIDL) 編譯器工具 。 midl.exe
Rebuild 清除並建置您的專案。
ResourceCompile 執行 Microsoft Windows 資源編譯器工具 rc.exe
XdcMake 執行 XML 檔工具 。 xdcmake.exe
Xsd 執行 XML 架構定義工具 。 xsd.exe 請參閱附注。

注意

在 Visual Studio 2017 和更新版本中,檔案的 .xsd C++ 專案支援已被取代。 您仍然可以手動將 新增 CppCodeProvider.dll 至 GAC 來使用 Microsoft.VisualC.CppCodeProvider

另請參閱

MSBuild 工作參考
BscMake 任務
CL 任務
CPPClean 任務
LIB 任務
Link 任務
MIDL 任務
MT 任務
RC 任務
SetEnv 任務
VCMessage 任務
XDCMake 任務