逐步解說:使用 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 版本特有的。 v160適用於 Visual Studio 2019。 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++ 來源檔案

  1. 為您的專案建立資料夾。

  2. 建立名為 main.cpp 的檔案,並將此程式代碼新增至檔案:

    // main.cpp : the application source code.
    #include <iostream>
    #include "main.h"
    int main()
    {
       std::cout << "Hello, from MSBuild!\n";
       return 0;
    }
    
  3. 建立名為 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 專案檔

  1. 使用文字編輯器建立名為 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> 標記之間的後續程式步驟中插入元素。

  2. 在元素中新增這兩 <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>
    
  3. <Import>新增專案,指定此項目的預設 C++ 設定路徑:

    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.default.props" />
    
  4. 新增指定兩個項目屬性<ConfigurationType>的屬性群組專案 (<PropertyGroup>) 和 <PlatformToolset>v140(如果您使用 Visual Studio 2015、如果您使用 Visual Studio 2017,v141或是v142使用 Visual Studio 2019,請使用 作為<PlatformToolset>值。

    <PropertyGroup>
      <ConfigurationType>Application</ConfigurationType>
      <PlatformToolset>v142</PlatformToolset>
    </PropertyGroup>
    
  5. <Import>新增專案,指定此專案目前 C++ 設定的路徑:

    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
    
  6. <ClCompile>在元素中<ItemGroup>加入子專案。 子項目會為要編譯的 C/C++ 來源檔案指定名稱:

    <ItemGroup>
      <ClCompile Include="main.cpp" />
    </ItemGroup>
    

    注意

    <ClCompile>是組建目標,且定義於預設目標資料夾中。

  7. <ClInclude>在元素中<ItemGroup>加入子專案。 子項目會為 C/C++ 來源檔案的標頭檔指定名稱:

    <ItemGroup>
      <ClInclude Include="main.h" />
    </ItemGroup>
    
  8. <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 專案:

另請參閱