逐步解說:使用 MSBuild 來建立 Visual C++ 專案
本逐步解說示範如何在命令提示字元中使用 MSBuild 來建置 Visual Studio C++ 專案。 您將瞭解如何為 Visual C++ 控制台應用程式建立 XML 型 .vcxproj
項目檔。 建置專案之後,您將了解如何自訂建置流程。
重要
如果您想要稍後使用 Visual Studio IDE 來編輯項目檔,請勿使用此方法。 如果您手動建立檔案 .vcxproj
,Visual Studio IDE 可能無法編輯或載入它,特別是當專案專案使用通配符時。 如需詳細資訊,請參閱和 檔案結構和.vcxproj
檔案和通配符。.props
.vcxproj
本逐步解說將說明下列工作:
- 為您的專案建立 C++ 來源檔案。
- 建立 XML MSBuild 專案檔。
- 使用 MSBuild 建置專案。
- 使用 MSBuild 自訂專案。
必要條件
您需要這些必要條件才能完成本逐步解說:
- 一份 Visual Studio 複本,其中已安裝使用 C++ 的桌面開發工作負載。
- 對 MSBuild 系統有大致的了解。
注意
大部分的低階建置指令都包含在 和 .props
檔案中.targets
,這些檔案定義於預設目標資料夾下,儲存在屬性$(VCTargetsPath)
中。 您可以在其中找到檔案,例如 Microsoft.Cpp.Common.props
。 Visual Studio 2015 和舊版中這些檔案的預設路徑位於 下 %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\<version>\
。
注意
大部分的低階建置指令都包含在 和 .props
檔案中.targets
,這些檔案定義於預設目標資料夾下,儲存在屬性$(VCTargetsPath)
中。 您可以在其中找到檔案,例如 Microsoft.Cpp.Common.props
。 Visual Studio 2017 中這些檔案的預設路徑位於 下 %VSINSTALLDIR%Common7\IDE\VC\VCTargets\
。 Visual Studio 2015 和舊版會將它們儲存在 之下 %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\<version>\
。
注意
大部分的低階建置指令都包含在 和 .props
檔案中.targets
,這些檔案定義於預設目標資料夾下,儲存在屬性$(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 Visual C++ 設定的位置。 - 屬性群組標記 (
<PropertyGroup>
),用來指定專案設定。
建立 MSBuild 專案檔
使用文字編輯器建立名為
myproject.vcxproj
的項目檔,然後新增此處顯示的根<Project>
元素。ToolsVersion="14.0"
(如果您使用 Visual Studio 2015、ToolsVersion="15.0"
如果您使用 Visual Studio 2017,或是ToolsVersion="16.0"
使用 Visual Studio 2019,請使用 。<Project DefaultTargets="Build" ToolsVersion="16.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" />
新增指定兩個項目屬性
<ConfigurationType>
的屬性群組專案 (<PropertyGroup>
) 和<PlatformToolset>
。v140
(如果您使用 Visual Studio 2015、如果您使用 Visual Studio 2017,v141
或是v142
使用 Visual Studio 2019,請使用 作為<PlatformToolset>
值。<PropertyGroup> <ConfigurationType>Application</ConfigurationType> <PlatformToolset>v142</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="15.0"
Visual Studio 2017 或 ToolsVersion="14.0"
Visual Studio 2015。)
<Project DefaultTargets="Build" ToolsVersion="16.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
專案檔的檔案<Import />
項目之後Microsoft.Cpp.default.props
:
<PropertyGroup>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
在命令提示字元中,輸入此命令以使用 64 位工具來建置您的應用程式:
msbuild myproject.vcxproj /p:PreferredToolArchitecture=x64
搭配使用 MSBuild 與不同工具組
如果您有安裝適用於其他 Visual C++ 版本的工具組與程式庫,MSBuild 可以針對目前的 Visual C++ 版本或其他已安裝的版本來建置應用程式。 例如,如果您已安裝 Visual Studio 2012,若要指定適用於 Windows XP 的 Visual C++ 11.0 工具組,請在檔案<Import />
項目項目之後Microsoft.Cpp.props
,將此屬性群組專案新增至Myproject.vcxproj
項目檔:
<PropertyGroup>
<PlatformToolset>v110_xp</PlatformToolset>
</PropertyGroup>
若要使用 Visual C++ 11.0 Windows XP 工具組重建專案,請輸入下列命令:
msbuild myproject.vcxproj /p:PlatformToolset=v110_xp /t:rebuild
新增 MSBuild 自訂項目
MSBuild 會提供各種自訂建置流程的方式。 這些文章說明如何將自訂建置步驟、工具和事件新增至 MSBuild 專案: