C++ 项目的 MSBuild 内部项

如果在 IDE 中设置项目属性并保存项目,则 Visual Studio 会将项目设置写入项目文件。 项目文件包含项目独有的设置, 但是不包含生成项目所需的所有设置。 项目文件包含 Import 元素,这些元素包括由其他支持文件形成的网络。这些支持文件包含生成项目所需的其余属性、目标和设置。

支持文件中的大部分目标和属性只用于实现生成系统。 本文讨论可在 MSBuild 命令行中指定的有用目标和属性。 若要了解更多目标和属性,请浏览支持文件目录中的文件。

支持文件目录

默认情况下,主要的 Visual Studio 支持文件位于以下目录中。 此信息特定于版本。

Visual Studio 2022 和 2019

  • %VSINSTALLDIR%MSBuild\Microsoft\VC\<version>\

    包含目标使用的主要目标文件 (.targets) 和属性文件 (.props)。 默认情况下,$(VCTargetsPath) 宏引用此目录。 <version> 占位符是指 Visual Studio 版本:对应于 Visual Studio 2022 的 v170、对应于 Visual Studio 2019 的 v160 或对应于 Visual Studio 2017 的 v150。

  • %VSINSTALLDIR%MSBuild\Microsoft\VC\<version>\Platforms\<platform>\

    包含特定于平台的目标文件和属性文件,这些文件会覆盖其父目录中的目标和属性。 此目录还包含定义此目录中的目标所使用的任务的 DLL。 <platform> 占位符表示 ARM、ARM64、Win32 或 x64 子目录。

  • %VSINSTALLDIR%MSBuild\Microsoft\VC\<version>\Platforms\<platform>\PlatformToolsets\<toolset>\

    包含让生成可通过使用指定 <toolset> 生成 C++ 应用程序的目录。 <platform> 占位符表示 ARM、ARM64、Win32 或 x64 子目录。 <toolset> 占位符表示工具集子目录。

Visual Studio 2017

  • %VSINSTALLDIR%Common7\IDE\VC\VCTargets\

    包含目标使用的主要目标文件 (.targets) 和属性文件 (.props)。 默认情况下,$(VCTargetsPath) 宏引用此目录。

  • %VSINSTALLDIR%Common7\IDE\VC\VCTargets\Platforms\<platform>\

    包含特定于平台的目标文件和属性文件,这些文件会覆盖其父目录中的目标和属性。 此目录还包含定义此目录中的目标所使用的任务的 DLL。 <platform> 占位符表示 ARM、ARM64、Win32 或 x64 子目录。

  • %VSINSTALLDIR%Common7\IDE\VC\VCTargets\Platforms\<platform>\PlatformToolsets\<toolset>\

    包含让生成可通过使用指定 <toolset> 生成 C++ 应用程序的目录。 <platform> 占位符表示 ARM、Win32 或 x64 子目录。 <toolset> 占位符表示工具集子目录。

Visual Studio 2015 及更早版本

  • <drive>:\Program Files[ (x86)]\MSBuild\Microsoft.Cpp\v4.0\<version>\

    包含目标使用的主要目标文件 (.targets) 和属性文件 (.props)。 默认情况下,$(VCTargetsPath) 宏引用此目录。

  • <drive>:\Program Files[ (x86)]\MSBuild\Microsoft.Cpp\v4.0\<version>\Platforms\<platform>\

    包含特定于平台的目标文件和属性文件,这些文件会覆盖其父目录中的目标和属性。 此目录还包含定义此目录中的目标所使用的任务的 DLL。 <platform> 占位符表示 ARM、Win32 或 x64 子目录。

  • <drive>:\Program Files[ (x86)]\MSBuild\Microsoft.Cpp\v4.0\<version>\Platforms\<platform>\PlatformToolsets\<toolset>\

    包含让生成可通过使用指定 <toolset> 生成 C++ 应用程序的目录。 <version> 占位符是对应于 Visual Studio 2012 的 V110、对应于 Visual Studio 2013 的 V120,以及对应于 Visual Studio 2015 的 V140。 <platform> 占位符表示 ARM、Win32 或 x64 子目录。 <toolset> 占位符表示工具集子目录。 例如,它是使用 Visual Studio 2015 工具集生成 Windows 应用的 v140。 或者是 v120_xp,可使用 Visual Studio 2013 工具集为 Windows XP 进行生成。

  • <drive>:\Program Files[ (x86)]\MSBuild\Microsoft.Cpp\v4.0\Platforms\<platform>\PlatformToolsets\<toolset>\

    允许生成来生成 Visual Studio 2008 或 Visual Studio 2010 应用程序的路径不包含 <version>。 在这些版本中,<platform> 占位符表示 Itanium、Win32 或 x64 子目录。 <toolset> 占位符表示 v90 或 v100 工具集子目录。

支持文件

支持文件目录包含带有以下扩展名的文件:

扩展 说明
.targets 包含指定由目标执行的任务的 Target XML 元素。 可能还包含 PropertyGroupItemGroupItemDefinitionGroup 和用户定义的 Item 元素,这些元素用于将文件和命令行选项分配给任务参数。

有关详细信息,请参阅 Target 元素 (MSBuild)
.props 包含 Property Group 和用户定义的 Property XML 元素,这些元素指定在生成过程中使用的文件和参数设置。

还可能包含 ItemDefinitionGroup 和用户定义的 Item XML 元素,这些元素指定其他设置。 在项定义组中定义的项类似于属性,但是无法从命令行访问。 Visual Studio 项目文件经常使用项(而不是属性)来表示设置。

有关详细信息,请参阅 ItemGroup 元素 (MSBuild)ItemDefinitionGroup 元素 (MSBuild)Item 元素 (MSBuild)
.xml 包含声明和初始化 IDE 用户界面元素的 XML 元素。 例如,属性表、属性页、文本框控件和列表框控件。

.xml 文件直接支持 IDE,而不支持 MSBuild。 不过 IDE 属性的值分配给生成属性和项。

大多数 .xml 文件都位于特定于区域设置的子目录中。 例如,美式英语区域的文件位于 $(VCTargetsPath)\1033\

用户目标和属性

若要有效地使用 MSBuild,最好了解哪些属性和目标是有用且相关的。 大多数属性和目标在实现 Visual Studio 生成系统方面都有所帮助,但与用户不相关。 本部分介绍值得了解的、面向用户的属性和目标。

PlatformToolset 属性

PlatformToolset 属性确定生成中使用的 MSVC 工具集。 默认使用当前工具集。 设置此属性后,其值会与文本字符串连接,形成路径。 它是目录,其中包含针对特定平台生成项目所需的属性和目标文件。 若要使用某个平台工具集版本进行生成,则必须安装该平台工具集。

例如,将 PlatformToolset 属性设为 v140,以使用 Visual Studio 2015 工具和库来生成应用程序:

msbuild myProject.vcxproj /p:PlatformToolset=v140

PreferredToolArchitecture 属性

PreferredToolArchitecture 属性确定在生成中是使用 32 位还是 64 位编译器和工具。 此属性不会影响输出平台体系结构或配置。 默认情况下,MSBuild 使用 x86 版本的编译器和工具(如果未设置此属性)。

例如,将 PreferredToolArchitecture 属性设为 x64,以使用 64 位编译器和工具来生成应用程序:

msbuild myProject.vcxproj /p:PreferredToolArchitecture=x64

UseEnv 属性

默认情况下,当前项目的特定于平台的设置会替代 PATHINCLUDELIBLIBPATHCONFIGURATIONPLATFORM 环境变量。 将 UseEnv 属性设为 true,可以保证这些环境变量不被替代。

msbuild myProject.vcxproj /p:UseEnv=true

目标

Visual Studio 支持文件中有数百个目标。 但是大多数目标都是面向系统的,用户可以忽略。 大多数系统目标都带有下划线 (_) 前缀,或者名称以 PrepareForComputeBeforeAfterPrePost 开头。

下表列出了一些有用的面向用户的目标。

目标 说明
BscMake 执行 Microsoft 浏览信息维护实用工具 bscmake.exe
Build 生成项目。

此目标是项目的默认目标。
ClCompile 执行 MSVC 编译器工具 cl.exe
Clean 删除临时生成文件和中间生成文件。
Lib 执行 Microsoft 32 位库管理器工具 lib.exe
Link 执行 MSVC 链接器工具 link.exe
ManifestResourceCompile 从清单中提取资源列表,然后执行 Microsoft Windows 资源编译器工具 rc.exe
Midl 执行 Microsoft 接口定义语言 (MIDL) 编译器工具 midl.exe
Rebuild 清理然后生成项目。
ResourceCompile 执行 Microsoft Windows 资源编译器工具 rc.exe
XdcMake 执行 XML 文档工具 xdcmake.exe
Xsd 执行 XML 架构定义工具 xsd.exe。 请参阅备注。

注意

在 Visual Studio 2017 和更高版本中,已弃用对 .xsd 文件的 C++ 项目支持。 仍可通过向 GAC 手动添加 CppCodeProvider.dll 来使用 Microsoft.VisualC.CppCodeProvider

另请参阅

MSBuild 任务参考
BscMake 任务
CL 任务
CPPClean 任务
LIB 任务
Link 任务
MIDL 任务
MT 任务
RC 任务
SetEnv 任务
VCMessage 任务
XDCMake 任务