MSBuild (Visual C++) 概述
MSBuild 是 Visual C++ 项目的标准生成系统。 在 Visual Studio 集成开发环境 (IDE) 中生成项目时,项目使用 msbuild.exe 工具、基于 XML 的项目文件以及可选设置文件。 尽管您可以在命令行上使用 msbuild.exe 和项目文件,不过 IDE 还是提供了用户界面,以便您可以更轻松地配置设置以及生成项目。 本概述介绍 Visual C++ 如何使用 MSBuild 系统。
必备组件
请阅读以下有关 MSBuild 的文档。
MSBuild
MSBuild 概念概述。MSBuild 参考
有关 MSBuild 系统的参考信息。MSBuild 项目文件架构引用
列出 MSBuild XML 架构元素及其特性以及父元素和子元素。 尤其注意 ItemGroup、PropertyGroup、Target 和 Task 元素。MSBuild 命令行参考
介绍可用于 msbuild.exe 的命令行参数和选项。MSBuild 任务参考
介绍 MSBuild 任务。 尤其注意以下特定于 Visual C++ 的任务:BscMake 任务、CL 任务、CPPClean 任务、LIB 任务、Link 任务、MIDL 任务、MT 任务、RC 任务、SetEnv 任务、VCMessage 任务、XDCMake 任务和 XSD 任务。
命令行上的 MSBuild
下面这个来自 MSBuild 命令行参考文档的语句阐释了 msbuild.exe 工具如何采用隐式或显式 project file 参数(对于 Visual C++ 项目为 .vcxproj 文件)以及零个或多个命令行 options。
msbuild.exe [project file] [options]
使用 /target(或 /t)和 /property(或 /p)命令行选项重写项目文件中指定的目标和属性。
项目文件主要用于指定“目标”(即应用于项目的具体操作)以及执行该操作所需的输入和输出。 一个项目文件可以指定一个或多个目标,这些目标可以包含默认目标。
每个目标均由一个或多个任务序列组成。 每个任务均由包含一个可执行命令的 .NET Framework 类表示。 例如,CL 任务包含 cl.exe 命令。
任务参数是类任务的属性且通常表示可执行命令的命令行选项。 例如,CL 任务的 FavorSizeOrSpeed 参数对应于 /Os 和 /Ot 编译器选项。
其他任务参数支持 MSBuild 基础结构。 例如,Sources 任务参数指定其他任务可使用的任务集。 有关 MSBuild 任务的更多信息,请参见 MSBuild 任务参考。
大多数任务都需要输入和输出,例如文件名、路径以及字符串、数字或布尔参数。 例如,常见的输入是要编译的 .cpp 源文件的名称。 一个重要的输入参数是用于指定生成配置和平台的字符串,例如“Debug|Win32”。 输入和输出由包含在 ItemGroup 元素中的一个或多个用户定义的 XML Item 元素指定。
项目文件还可以指定用户定义的属性和“项定义组”项。 属性和项形成可在生成中用作变量的名称/值对。 名称/值对的名称部分定义宏,值部分声明宏值。 属性宏通过使用 $(名称) 表示法进行访问,项宏通过使用 %(名称) 表示法进行访问。
项目文件中的其他 XML 元素可以测试宏,然后按条件设置任何宏的值或控制生成的执行。 可以将宏名和文本字符串串联在一起生成构造,例如路径和文件名。 在命令行上,/property 选项设置或重写项目属性。 不能在命令行上引用项。
MSBuild 系统可以按条件在一个目标之前或之后执行另一个目标。 此外,该系统可基于目标所用的文件是否比它发出的文件新来生成目标。
IDE 中的 MSBuild
在 IDE 中设置项目属性然后保存项目时,Visual C++ 会将项目设置写入项目文件中。 项目文件包含一个项目独有的设置,但不包含生成项目所需的全部设置。 项目文件包含 Import 元素,这些元素包括其他支持文件的网络。支持文件包含生成项目所需的其余属性、目标及设置。
支持文件中的大多数目标和属性只是为了实现生成系统而存在。 下面这一部分讨论您可以在 MSBuild 命令行上指定的一些有用目标和属性。 若要了解其他目标和属性,请浏览支持文件目录中的相应文件。
支持文件目录
默认情况下,主 Visual C++ 支持文件位于以下目录中。
目录 |
说明 |
---|---|
驱动器:\Program Files\MSBuild\Microsoft.Cpp\v4.0\ |
包含目标使用的主目标文件 (.targets) 和属性文件 (.props)。 默认情况下,$(VCTargetsPath) 宏引用此目录。 |
驱动器:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\平台\ |
包含特定于平台的目标和属性文件,这些文件会重写其父目录中的目标和属性。 此目录还包含一个 .dll 文件,该文件定义此目录中的目标所使用的任务。 平台 占位符表示 Itanium、Win32 或 x64 子目录。 |
驱动器:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\平台\ PlatformToolsets\工具集\ |
包含使生成操作能够生成 9.0 或 Visual C++ 10.0 应用程序的目录。 平台 占位符表示 Itanium、Win32 或 x64 子目录。 工具集 占位符表示 v90 或 v100 工具集子目录。 |
支持文件
支持文件目录包含具有以下扩展名的文件。
扩展 |
说明 |
---|---|
.targets |
包含用于指定目标所执行任务的 Target XML 元素。 还可以包含用于将文件和命令行选项分配给任务参数的 Property Group、Item Group、Item Definition Group 以及用户定义的 Item 元素。 有关更多信息,请参见 Target 元素 (MSBuild)。 |
.props |
包含用于指定生成过程中所用文件和参数设置的 Property Group 和用户定义的 Property XML 元素。 还可以包含用于指定其他设置的 Item Definition Group 和用户定义的 Item XML 元素。 在项定义组中定义的项类似于属性,但不能从命令行进行访问。 Visual C++ 项目文件通常使用项而不是属性来表示设置。 有关更多信息,请参见 ItemGroup 元素 (MSBuild)、ItemDefinitionGroup 元素 (MSBuild) 和 Item 元素 (MSBuild)。 |
.xml |
包含用于声明和初始化 IDE 用户界面元素(例如属性表和属性页以及文本框和列表框控件)的 XML 元素。 .xml 文件直接支持 IDE,而非 MSBuild。 不过,系统会赋予 IDE 属性值以生成属性和项。 大多数 .xml 文件都位于特定于区域设置的子目录中。 例如,针对美国英语区域的文件位于 $(VCTargetsPath)\1033\ 中。 |
用户目标和属性
若要在命令行上最有效地使用 MSBuild,则了解哪些属性和目标有用且相关会很有帮助。 大多数属性和目标都是为了帮助实现 Visual C++ 生成系统,因而,它们与用户无关。 本部分介绍面向用户的一些有用属性和目标。
PlatformToolset 属性
PlatformToolset 属性用于确定在生成中使用 Visual C++ 2010 还是 Visual C++ 2008 工具集。 该属性的值与文本字符串串联,从而形成包含为特定平台生成项目所需的属性和目标文件的目录路径。
将 PlatformToolset 属性设置为 v100 可使用 Visual C++ 2010 工具生成应用程序。
msbuild myProject.vcxproj /p:PlatformToolset=v100
将 PlatformToolset 属性设置为 v90 可使用 Visual C++ 2008 工具生成应用程序。 计算机上必须已安装 Visual C++ 2008 工具集才能使此属性有效。
msbuild myProject.vcxproj /p:PlatformToolset=v90
UseEnv 属性
默认情况下,当前项目特定于平台的设置重写 PATH、INCLUDE、LIB、LIBPATH、CONFIGURATION 和 PLATFORM 环境变量。 将 UseEnv 属性设置为 true 可保证不重写这些环境变量。
msbuild myProject.vcxproj /p:UseEnv=true
目标
Visual C++ 支持文件中有数百个目标。 不过,大多数都是面向系统的目标,用户可以忽略它们。 大多数系统目标以下划线 (_) 作为前缀,或者具有一个以“PrepareFor”、“Compute”、“Before”、“After”、“Pre”或“Post”开头的名称。
下表列出了几个面向用户的有用目标。
Target |
说明 |
---|---|
BscMake |
用于执行 Microsoft 浏览信息维护实用工具 bscmake.exe。 |
Build |
生成项目。 这是项目的默认目标。 |
ClCompile |
用于执行 Visual C++ 编译器工具 cl.exe。 |
清理 |
用于删除临时和中间生成文件。 |
Lib |
用于执行 Microsoft 32 位库管理器工具 lib.exe。 |
Link |
用于执行 Visual C++ 链接器工具 link.exe。 |
ManifestResourceCompile |
用于从清单中提取资源列表,然后执行 Microsoft Windows 资源编译器工具 rc.exe。 |
Midl |
用于执行 Microsoft 接口定义语言 (MIDL) 编译器工具 midl.exe。 |
重新生成 |
用于清理然后生成项目。 |
ResourceCompile |
用于执行 Microsoft Windows 资源编译器工具 rc.exe。 |
XdcMake |
用于执行 XML 文档工具 xdcmake.exe。 |
Xsd |
用于执行 XML 架构定义工具 xsd.exe。 |