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 元素。 可能还包含 PropertyGroup 、ItemGroup 、ItemDefinitionGroup 和用户定义的 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
属性
默认情况下,当前项目的特定于平台的设置会替代 PATH
、INCLUDE
、LIB
、LIBPATH
、CONFIGURATION
和 PLATFORM
环境变量。 将 UseEnv
属性设为 true
,可以保证这些环境变量不被替代。
msbuild myProject.vcxproj /p:UseEnv=true
目标
Visual Studio 支持文件中有数百个目标。 但是大多数目标都是面向系统的,用户可以忽略。 大多数系统目标都带有下划线 (_
) 前缀,或者名称以 PrepareFor
、Compute
、Before
、After
、Pre
或 Post
开头。
下表列出了一些有用的面向用户的目标。
目标 | 说明 |
---|---|
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
任务