逐步解說:使用 MSBuild 來建立 Visual C++ 專案
這個逐步解說示範如何在命令提示字元中使用 MSBuild 建置 Visual C++ 專案。 您將學習如何為 Visual C++ 主控台應用程式建立 C++ 原始程式檔和 XML 專案檔。 建置專案之後,您將學習如何自訂建置流程。
這個逐步解說將說明下列工作:
為您的專案建立 C++ 原始程式檔。
建立 XML MSBuild 專案檔。
使用 MSBuild 建置專案。
使用 MSBuild 自訂專案。
必要條件
您需要下列項目才能完成本逐步解說:
Visual Studio 2013
MSBuild 系統的一般概念了解。
建立 C++ 原始程式檔
在此逐步解說中,您將建立一個具有原始程式檔和標頭檔的專案。 原始程式檔 main.cpp 包含主控台應用程式的 main 函式。 標頭檔 main.h 包含用於包含 iostream 標頭檔的程式碼。 您可以使用 Visual Studio 或文字編輯器建立這些 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> 項目。 插入下列程序步驟中介於根 <Project> 標記之間的項目:
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="https://schemas.microsoft.com/developer/msbuild/2003"> </Project>
在 <ItemGroup> 項目中加入下列兩個 <ProjectConfiguration> 子項目。 此子項目可指定 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>),以指定兩個專案屬性:
<PropertyGroup> <ConfigurationType>Application</ConfigurationType> <PlatformToolset>v120</PlatformToolset> </PropertyGroup>
加入下列 <Import/> 項目,為此專案指定目前 C++ 設定的路徑:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
在 <ItemGroup> 項目中加入下列 <ClCompile> 子項目。 此子項目可指定要編譯之 C/C++ 原始程式檔的名稱:
<ItemGroup> <ClCompile Include="main.cpp" /> </ItemGroup>
在 <ItemGroup> 項目中加入下列 <ClInclude> 子項目。 此子項目可指定 C/C++ 原始程式檔的標頭檔名稱:
<ItemGroup> <ClInclude Include="main.h" /> </ItemGroup>
加入下列 <Import> 項目,為此專案指定可定義目標的檔案路徑:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Targets" />
完成專案檔
下列程式碼顯示您在上一個程序中建立的完整專案檔。
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="https://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>v120</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 與建置目標
「建置目標」(Build Target) 是預先定義或使用者定義之命令的命名集,這些命令可以在建置期間執行。 使用目標命令列選項 (/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 C++,根據預設會安裝 64 位元 x64 Native 和 Cross Tools。 您可以透過設定 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 與不同 Toolset
如果您已安裝其他 Visual C++ 版本的工具組和程式庫,MSBuild 可為目前的 Visual C++ 版本或其他已安裝版本建置應用程式。 例如,如果您已安裝 Visual Studio 2012 中的 Visual C++,若要指定適用於 Windows XP 的 Visual C++ 11.0 工具組,請將下列屬性群組項目加入至 Myproject.vcxproj 專案檔中的 Microsoft.Cpp.props <Import /> 項目後面:
<PropertyGroup>
<PlatformToolset>v110_xp</PlatformToolset>
</PropertyGroup>
若要使用 Visual C++ Windows XP 11.0 工具組重新建置專案,請輸入下列任一命令:
msbuild myproject.vcxproj /p:PlatformToolset=v110_xp /t:rebuild
msbuild myproject.vcxproj /t:rebuild
加入 MSBuild 自訂項目
MSBuild 提供各種自訂建置流程的方法。 下列主題顯示如何將自訂建置步驟、工具和事件加入至 MSBuild 專案: