本逐步解說示範如何在命令提示字元中使用 MSBuild 來建置 Visual Studio C++ 專案。 您將瞭解如何為 C++ 主控台應用程式建立 XML 型 .vcxproj 專案檔。 建置專案之後,您將了解如何自訂建置流程。
重要
如果您想要稍後使用 Visual Studio IDE 來編輯項目檔,請勿使用此方法。 如果您手動建立檔案 .vcxproj ,Visual Studio IDE 可能無法編輯或載入它,特別是當專案專案使用通配符時。 如需詳細資訊,請參閱和 檔案結構和.vcxproj.props檔案和通配符。.vcxproj
本逐步解說將說明下列工作:
- 為您的專案建立 C++ 來源檔案。
- 建立 XML MSBuild 專案檔。
- 使用 MSBuild 建置專案。
- 使用 MSBuild 自訂專案。
必要條件
您需要這些必要條件才能完成本逐步解說:
- 一份 Visual Studio 複本,其中已安裝使用 C++ 的桌面開發工作負載。
- 對 MSBuild 系統有大致的了解。
注意
大部分的低階建置指令都包含在 和 .targets 檔案中.props,這些檔案定義於預設目標資料夾下,儲存在屬性$(VCTargetsPath)中。 您可以在其中找到檔案,例如 Microsoft.Cpp.Common.props。 Visual Studio 2015 和舊版中這些檔案的預設路徑位於 下 %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\<version>\。
注意
大部分的低階建置指令都包含在 和 .targets 檔案中.props,這些檔案定義於預設目標資料夾下,儲存在屬性$(VCTargetsPath)中。 您可以在其中找到檔案,例如 Microsoft.Cpp.Common.props。 Visual Studio 2017 中這些檔案的預設路徑位於 下 %VSINSTALLDIR%Common7\IDE\VC\VCTargets\。 Visual Studio 2015 和舊版會將它們儲存在 之下 %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\<version>\。
注意
大部分的低階建置指令都包含在 和 .targets 檔案中.props,這些檔案定義於預設目標資料夾下,儲存在屬性$(VCTargetsPath)中。 您可以在其中找到檔案,例如 Microsoft.Cpp.Common.props。 這些檔案的預設路徑位於 底下 %VSINSTALLDIR%MSBuild\Microsoft\VC\<version>\。
<version> path 元素是 Visual Studio 版本特有的。 對於 Visual Studio 2019 而言,是 v160。 Visual Studio 2017 會將這些檔案儲存在 底下 %VSINSTALLDIR%Common7\IDE\VC\VCTargets\。 Visual Studio 2015 和舊版會將它們儲存在 之下 %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\<version>\。
建立C++來源檔案
在本逐步解說中,您將建立具有來源檔案和標頭檔的專案。 原始程式檔 main.cpp 包含 main 主控台應用程式的函式。 頭檔 main.h 包含包含 <iostream> 頭檔的程序代碼。 您可以使用 Visual Studio 或 Visual Studio Code 之類的文字編輯器來建立這些 C++ 檔案。
為您的專案建立 C++ 來源檔案
為您的專案建立資料夾。
建立名為
main.cpp的檔案,並將此程式代碼新增至檔案:// main.cpp : the application source code. #include <iostream> #include "main.h" int main() { std::cout << "Hello, from MSBuild!\n"; return 0; }建立名為
main.h的檔案,並將此程式代碼新增至檔案:// main.h: the application header code. /* Additional source code to include. */
建立 XML MSBuild 專案檔
MSBuild 專案檔是包含專案根項目 (<Project>) 的 XML 檔案。 在您將建置的範例專案中, <Project> 元素包含七個子元素:
- 三個項目群組標記 (
<ItemGroup>),用來指定專案組態與平台、來源檔案名稱及標頭檔名稱。 - 三個匯入標籤 (
<Import>) 指定 Microsoft C++ 設定的位置。 - 屬性群組標記 (
<PropertyGroup>),用來指定專案設定。
建立 MSBuild 專案檔
使用文字編輯器建立名為
myproject.vcxproj的項目檔,然後新增此處顯示的根<Project>元素。 如果您使用 Visual Studio 2015,請使用ToolsVersion="14.0";如果您使用 Visual Studio 2017,請使用ToolsVersion="15.0";如果您使用 Visual Studio 2019,請使用ToolsVersion="16.0";如果您使用 Visual Studio 2022,請使用ToolsVersion="17.0"。<Project DefaultTargets="Build" ToolsVersion="17.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> </Project>在根
<Project>標記之間的後續程式步驟中插入元素。請在一個
<ProjectConfiguration>元素中新增這兩個<ItemGroup>子元素。 子項目會指定適用於 32 位元 Windows 作業系統的偵錯和版本設定:<ItemGroup> <ProjectConfiguration Include="Debug|Win32"> <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> </ItemGroup>新增一個
<Import>元素,指定此專案的預設C++設定路徑:<Import Project="$(VCTargetsPath)\Microsoft.Cpp.default.props" />新增一個屬性群組元素(
<PropertyGroup>),以指定兩個項目屬性<ConfigurationType>和<PlatformToolset>。 (如果您使用 Visual Studio 2015,請使用v140作為<PlatformToolset>值;如果您使用 Visual Studio 2017,請使用v141作為<PlatformToolset>值;如果您使用 Visual Studio 2019,請使用v143作為<PlatformToolset>值;如果您使用 Visual Studio 2022,請使用 作為 值。)<PropertyGroup> <ConfigurationType>Application</ConfigurationType> <PlatformToolset>v143</PlatformToolset> </PropertyGroup>新增
<Import>元素,以指定此專案目前的C++設定路徑:<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />在
<ClCompile>元素中加入<ItemGroup>子元素。 子項目會為要編譯的 C/C++ 來源檔案指定名稱:<ItemGroup> <ClCompile Include="main.cpp" /> </ItemGroup>注意
<ClCompile>是組建目標,且定義於預設目標資料夾中。在
<ClInclude>元素中加入<ItemGroup>子元素。 子項目會為 C/C++ 來源檔案的標頭檔指定名稱:<ItemGroup> <ClInclude Include="main.h" /> </ItemGroup>新增一個
<Import>元素,指定定義此專案目標的檔案路徑:<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Targets" />
完成專案文件
此程式代碼會顯示您在上一個程式中建立的完整項目檔。 請使用 ToolsVersion=16.0 for Visual Studio 2019, ToolsVersion="15.0" Visual Studio 2017,或 ToolsVersion="14.0" Visual Studio 2015。
<Project DefaultTargets="Build" ToolsVersion="17.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.default.props" />
<PropertyGroup>
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ItemGroup>
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="main.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Targets" />
</Project>
使用 MSBuild 建置專案
在命令提示字元中輸入此命令,以建置主控台應用程式:
msbuild myproject.vcxproj /p:configuration=debug
MSBuild 會建立輸出檔案的資料夾,然後編譯並連結您的專案以產生 Myproject.exe 程式。 建置程式完成之後,請使用此命令從偵錯資料夾執行應用程式:
myproject
應用程式應該會在主控台視窗中顯示 「Hello, from MSBuild!“ 。
自訂您的專案
MSBuild 可讓您執行預先定義的建置目標、套用使用者定義的屬性,以及使用自訂工具、事件與建置步驟。 本節說明下列工作:
- 使用 MSBuild 配合建置目標進行建置。
- 使用 MSBuild 及建置屬性。
- 搭配使用 MSBuild 與 64 位元編譯器和工具。
- 搭配使用 MSBuild 與不同工具組。
- 新增 MSBuild 自訂項目。
使用 MSBuild 搭配建置目標
「建置目標」是一組具名的預先定義或使用者定義命令,可以在建置期間執行。 使用目標命令列選項 (/t) 來指定建置目標。
myproject針對範例專案,預先定義的clean目標會刪除偵錯資料夾中的所有檔案,並建立新的記錄檔。
在命令提示字元中,輸入此指令以清除 myproject:
msbuild myproject.vcxproj /t:clean
使用 MSBuild 與建置屬性
屬性命令列選項 (/p) 可讓您覆寫專案建置檔案中的屬性。 在 myproject 範例專案中,Configuration 屬性會指定版本或偵錯建置組態。 您將用來執行建置應用程式的作業系統是由 Platform 屬性所指定。
在命令提示字元中,輸入此命令以建立要於 32 位 Windows 上執行之應用程式的偵錯組建 myproject :
msbuild myproject.vcxproj /p:configuration=debug /p:platform=win32
我們假設 myproject 範例專案也會定義適用於 64 位元 Windows 的組態,以及另一個適用於 myplatform 自訂作業系統的組態。
在命令提示字元中,輸入此命令以建立在64位 Windows 上執行的發行組建:
msbuild myproject.vcxproj /p:configuration=release /p:platform=x64
在命令提示字元中,輸入此命令以建立 myplatform 的發行版本:
msbuild myproject.vcxproj /p:configuration=release /p:platform=myplatform
搭配使用 MSBuild 與 64 位元編譯器和工具
如果您已在 64 位 Windows 上安裝 Visual Studio,預設會安裝 64 位 x64 原生和跨工具。 您可以藉由設定 PreferredToolArchitecture 屬性,將 MSBuild 設定為使用 64 位元編譯器和工具來建置應用程式。 此屬性不會影響專案組態或平台屬性。 根據預設,系統會使用 32 位元版本的工具。 若要指定編譯器和工具的64位版本,請在Myproject.vcxproj檔案Microsoft.Cpp.default.props元素之後,將此屬性群組元素新增至<Import />專案檔案中:
<PropertyGroup>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
在命令提示字元中,輸入此命令以使用 64 位工具來建置您的應用程式:
msbuild myproject.vcxproj /p:PreferredToolArchitecture=x64
使用不同工具組的 MSBuild
如果您已安裝其他版本 Microsoft C++ (MSVC) 的工具集和程式庫,MSBuild 可以針對目前的 MSVC 版本或其他已安裝版本建置應用程式。 例如,如果您已安裝 Visual Studio 2012,若要指定適用於 Windows XP 的 Visual C++ 11.0 工具組,請在Myproject.vcxproj 元素之後,將此屬性群組元素新增至 Microsoft.Cpp.props 專案檔:
<PropertyGroup>
<PlatformToolset>v110_xp</PlatformToolset>
</PropertyGroup>
若要使用 Visual C++ 11.0 Windows XP 工具組重建專案,請輸入下列命令:
msbuild myproject.vcxproj /p:PlatformToolset=v110_xp /t:rebuild
新增 MSBuild 自訂項目
MSBuild 會提供各種自訂建置流程的方式。 這些文章說明如何將自訂建置步驟、工具和事件新增至 MSBuild 專案: