此演练演示如何在命令提示符处使用 MSBuild 生成 Visual C++ 项目。 您将学习如何为 Visual C++ 控制台应用程序创建 C++ 源文件和基于 XML 的项目文件。 生成项目后,您将学习如何自定义生成过程。
本演练阐释了以下任务:
为项目创建 C++ 源文件。
创建 XML MSBuild 项目文件。
使用 MSBuild 生成项目。
使用 MSBuild 自定义项目。
系统必备
要完成本演练,您需要:
Visual Studio 2013
大概了解 MSBuild 系统。
创建 C++ 源文件
在本演练中,您将创建一个具有源文件和头文件的项目。 源文件 main.cpp 包含控制台应用程序的主要功能。 头文件 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 与生成属性结合使用。
使用带有 64 位编译器和工具的 MSBuild。
将 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
使用带有 64 位编译器和工具的 MSBuild
如果已在 64 位 Windows 上安装了 Visual C++,默认情况下,将安装 64 位 x64 本机和兼容工具。 可配置 MSBuild,使用 64 位编译器和工具以通过设置 PreferredToolArchitecture 属性来生成应用程序。 此属性不影响项目配置或平台属性。 默认情况下使用该工具的 32 位版本。 如要指定编辑器和工具的 64 位版本,请将以下属性组元素添加到 Microsoft.Cpp.default.props <导入/>元素之后的 Myproject.vcxproj 项目文件中:
<PropertyGroup>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
在命令提示符处,键入以下命令以使用 64 位工具生成应用程序。
msbuild myproject.vcxproj /p:PreferredToolArchitecture=x64
将 MSBuild 与不同的工具集结合使用
如果您已安装适用于 Visual C++ 的其他版本的工具集和库,MSBuild 则可以生成适用于当前 Visual C++ 版本或其他已安装版本的应用程序。 例如,如果您已安装了 Visual Studio 2012 中的 Visual C++,为对 Windows XP 指定 Visual C++ 11.0 工具集,请将以下属性组元素添加到位于 Microsoft.Cpp.props <Import /> 元素后的 Myproject.vcxproj 项目文件中:
<PropertyGroup>
<PlatformToolset>v110_xp</PlatformToolset>
</PropertyGroup>
若要使用 Visual C++ 11.0 Windows XP 工具集重新生成您的项目,请键入以下任何一条命令:
msbuild myproject.vcxproj /p:PlatformToolset=v110_xp /t:rebuild
msbuild myproject.vcxproj /t:rebuild
添加 MSBuild 自定义项
MSBuild 提供了自定义生成过程的不同方式。 以下主题演示如何向 MSBuild 项目添加自定义的生成步骤、工具和事件。