演练:使用 MSBuild 创建 Visual C++ 项目

此演练演示如何在命令提示符处使用 MSBuild 生成 Visual C++ 项目。 您将学习如何为 Visual C++ 控制台应用程序创建 C++ 源文件和基于 XML 的项目文件。 生成项目后,您将学习如何自定义生成过程。

本演练阐释了以下任务:

  • 为项目创建 C++ 源文件。

  • 创建 XML MSBuild 项目文件。

  • 使用 MSBuild 生成项目。

  • 使用 MSBuild 自定义项目。

系统必备

要完成本演练,您需要:

  • Visual Studio 2010

  • 大概了解 MSBuild 系统。

创建 C++ 源文件

在本演练中,您将创建一个具有源文件和头文件的项目。 源文件 main.cpp 包含控制台应用程序的主要功能。 头文件 main.h 包含用于纳入 iostream 头文件的代码。 您可以使用 Visual Studio 或文本编辑器创建这些 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> 元素。 在根 <Project> 标记之间插入以下过程步骤中的元素:

    <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns=https://schemas.microsoft.com/developer/msbuild/2003>
    </Project>
    
  2. 在 <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>
    
  3. 添加以下 <Import/> 元素,该元素为此项目指定默认 C++ 设置的路径:

    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.default.props" />
    
  4. 添加以下属性组元素 (<PropertyGroup>),该元素指定两个项目属性:

    <PropertyGroup>
       <ConfigurationType>Application</ConfigurationType>
       <ShowAllFiles>false</ShowAllFiles>
    </PropertyGroup>
    
  5. 添加以下 <Import/> 元素,该元素为此项目指定当前 C++ 设置的路径:

    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
    
  6. 将 <ItemGroup> 元素的以下 <ClCompile> 子元素。 该子元素指定要编译的 C/C++ 源文件的名称:

    <ItemGroup>
       <ClCompile Include="main.cpp" />
    </ItemGroup>
    
  7. 将 <ItemGroup> 元素的以下 <ClInclude> 子元素。 该子元素为 C/C++ 源文件指定头文件的名称:

    <ItemGroup>
       <ClInclude Include="main.h" />
    </ItemGroup>
    
  8. 添加以下 <Import> 元素,该元素指定为此项目定义目标的文件的路径:

    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Targets" />
    

Dd293607.collapse_all(zh-cn,VS.110).gif完整的项目文件

以下代码显示了在上一个过程中创建的完整的项目文件。

<Project DefaultTargets="Build" ToolsVersion="4.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>
    <ShowAllFiles>false</ShowAllFiles>
  </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 与不同的工具集结合使用。

  • 添加 MSBuild 自定义项。

Dd293607.collapse_all(zh-cn,VS.110).gif将 MSBuild 与生成目标结合使用

生成目标是指定的一组预定义命令或用户定义的命令,这组命令可在生成期间执行。 使用目标命令行选项 (/t) 可以指定生成目标。 对于 myproject 示例项目,预定义的 clean 目标将删除调试文件夹中的所有文件并创建新日志文件。

在命令提示符处,键入以下命令以清理 myproject

msbuild myproject.vcxproj /t:clean

Dd293607.collapse_all(zh-cn,VS.110).gif将 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

Dd293607.collapse_all(zh-cn,VS.110).gif将 MSBuild 与不同的工具集结合使用

如果同时安装了 Visual C++ 9.0 和 10.0 库(工具集),则 MSBuild 可以针对 Visual C++ 9.0 或 10.0 生成应用程序。 若要指定 Visual C++ 9.0 工具集,请将以下属性组元素添加到 Myproject.vcxproj 项目文件中 Microsoft.Cpp.props <Import /> 元素的后面:

<PropertyGroup>
    <PlatformToolset>v90</PlatformToolset>
</PropertyGroup>

若要使用 Visual C++ 9.0 工具集重新生成项目,请键入以下任何一条命令:

msbuild myproject.vcxproj /p:PlatformToolset=v90 /t:rebuild 
msbuild myproject.vcxproj /t:rebuild

Dd293607.collapse_all(zh-cn,VS.110).gif添加 MSBuild 自定义项

MSBuild 提供了自定义生成过程的不同方式。 以下主题演示如何向 MSBuild 项目添加自定义的生成步骤、工具和事件。