用于 MSBuild 命令和属性的常用宏

根据你的安装选项,Visual Studio 可以在基于 MSBuild 的 .vcxproj Visual Studio 项目中为你提供数百个宏。 这些宏对应于 MSBuild 属性,它们要么是默认设置的,要么是在 .props.targets 文件中,或者在项目设置中设置的。 你可以在项目“属性页” 对话框中接受字符串的任意位置使用这些宏。 这些宏不区分大小写。

查看当前属性和宏

若要显示所有当前可用的宏,请从主菜单中选择“项目>属性”打开项目属性页。 在“属性页”对话框中,选择包含宏的条目。 可以通过括住其名称的美元符号和括号来识别宏。

例如,在左窗格中,选择“配置属性>VC++ 目录”,然后在右窗格中选择“包括目录”Include 目录 的值 $(VC_IncludePath);$(WindowsSDK_IncludePath);

美元符号和括住这两个值的括号表示它们是宏。 这两个宏的扩展设置要搜索的 include 目录。

选择“包含目录”后,下拉列表将显示在行的末尾。 选择下拉列表按钮,然后选择“编辑”。 在出现的“Include 目录”对话框中,选择“宏”>>按钮。

随即展开对话框以显示 Visual Studio 可见的当前属性集和宏,以及每个对象的当前值。 有关详细信息,请参阅 C++ 项目属性页引用的“指定用户定义的值”部分

选择“宏”按钮后 Visual Studio“包含目录”对话框的屏幕截图。

右侧是 Visual Studio 宏的列表,例如 $(AllowLocalNetworkLoopback)。 左窗格显示 include 目录属性的评估值。 底部窗格显示要生成 include 目录属性值的宏(如果有)。 由于 Include 目录宏是另外两个宏 $(VC_IncludePath) 和 $(WindowsSDK_IncludePath) 的组合,因此底部窗格标记为“继承值”,列出了这两个宏。

常见宏列表

下表描述了可用宏的常用子集;还有很多没有在这里列出。 转到“宏”对话框,查看项目中的所有属性及其当前值。 有关如何创建 MSBuild 属性定义以及如何在 .props.targets.vcxproj 文件中将其用作宏的详细信息,请参阅 MSBuild 属性

说明
$(Configuration) 当前项目配置的名称,例如,“调试”。
$(DevEnvDir) Visual Studio 的安装目录(定义为驱动器 + 路径);包括尾随反斜杠 (\)。
$(FrameworkDir) 在其中安装了 .NET Framework 的目录。
$(FrameworkSDKDir) 在其中安装了 .NET Framework 的目录。 .NET Framework 可能已作为 Visual Studio 的一部分安装或已单独安装。
$(FrameworkVersion) Visual Studio 使用的.NET framework 版本。 结合 $(FrameworkDir),就是 Visual Studio 使用的 .NET Framework 版本的完整路径。
$(FxCopDir) fxcop.cmd 文件的路径。 fxcop.cmd 文件并未在所有 Visual Studio 版本中安装。
$(IntDir) 为中间文件指定的目录路径。 如果这是一个相对路径,中间文件将转到已追加到项目目录的这一路径。 此路径应包含尾随斜杠 (\)。 它解析为“中间目录”属性的值。 请勿使用 $(OutDir) 来定义此属性。
$(OutDir) 输出文件目录的路径。 如果这是一个相对路径,输出文件将转到已追加到项目目录中的这一路径。 此路径应包含尾随斜杠 (\)。 它解析为“输出目录”属性的值。 请勿使用 $(IntDir) 来定义此属性。
$(Platform) 当前项目平台的名称(例如“Win32”)。
$(PlatformShortName) 当前体系结构的短名称,例如“x86”或“x64”。
$(ProjectDir) 项目的目录(定义为驱动器 + 路径);包括尾随反斜杠 (\)。
$(ProjectExt) 项目的文件扩展名。 文件扩展名之前包括“.”。
$(ProjectFileName) 项目的文件名称(定义为基名称 + 文件扩展名)。
$(ProjectName) 项目的基名称。
$(ProjectPath) 项目的绝对路径名称(定义为驱动器 + 路径 + 基名称 + 文件扩展名)。
$(PublishDir) 发布目标的输出位置;包括尾随反斜杠 (\)。 默认为 $(OutDir)app.publish\ 文件夹。
$(RemoteMachine) 设置为“调试”属性页上 Remote Machine 属性的值。 有关详细信息,请参阅更改 C/C++ 调试配置的项目设置
$(RootNameSpace) 包含应用程序的命名空间(如果存在)。
$(SolutionDir) 解决方案的目录(定义为驱动器 + 路径);包括尾随反斜杠 (\)。 仅当在 IDE 中生成解决方案时定义。
$(SolutionExt) 解决方案的文件扩展名。 文件扩展名之前包括“.”。 仅当在 IDE 中生成解决方案时定义。
$(SolutionFileName) 解决方案的文件名称(定义为基名称 + 文件扩展名)。 仅当在 IDE 中生成解决方案时定义。
$(SolutionName) 解决方案的基名称。 仅当在 IDE 中生成解决方案时定义。
$(SolutionPath) 解决方案的绝对路径名称(定义为驱动器 + 路径 + 基名称 + 文件扩展名)。 仅当在 IDE 中生成解决方案时定义。
$(TargetDir) 生成的主输出文件的目录(定义为驱动器 + 路径);包括尾随反斜杠 (\)。
$(TargetExt) 生成的主输出文件的文件扩展名。 文件扩展名之前包括“.”。
$(TargetFileName) 生成的主输出文件的文件名称(定义为基名称 + 文件扩展名)。
$(TargetName) 生成的主输出文件的基名称。
$(TargetPath) 生成的主输出文件的绝对路径名称(定义为驱动器 + 路径 + 基名称 + 文件扩展名)。
$(VCInstallDir) 包含 Visual Studio 安装的 C++ 内容的目录。 此属性包含目标 Microsoft C++ (MSVC) 工具集的版本,它可能与主机 Visual Studio 不同。 例如,当使用 $(PlatformToolset) = v140 进行生成时,$(VCInstallDir) 包含 Visual Studio 2015 安装路径。
$(VSInstallDir) 在其中安装了 Visual Studio 的目录。 此属性包含目标 Visual Studio 工具集的版本,它可能与主机 Visual Studio 不同。 例如,当使用 $(PlatformToolset) = v110 进行生成时,$(VSInstallDir) 包含 Visual Studio 2012 安装路径。
$(WebDeployPath) 从 Web 部署根到项目输出位置的相对路径。
$(WebDeployRoot) <localhost> 位置的绝对路径。 例如 c:\inetpub\wwwroot

弃用的宏

Visual Studio 2008 和 Visual Studio 2010 之间的 C++ 生成系统已显著更改。 早期项目类型中使用的许多宏已更改为新的宏。 这些宏已不再使用,或已替换为一个或多个等效属性或项元数据宏 (%(item-name)) 值。 迁移工具可以更新标记为“已迁移”的宏。 如果包含宏的项目从 Visual Studio 2008 或更早版本迁移到 Visual Studio 2010,Visual Studio 会将宏转换为等效的当前宏。 更高版本的 Visual Studio 无法将 Visual Studio 2008 和更低版本中的项目转换为新的项目类型。 转换这些项目必须执行两步操作;首先将这些项目转换为 Visual Studio 2010,然后将结果转换为更新版本的 Visual Studio。 有关详细信息,请参阅潜在的升级问题概述

说明
$(InputDir) (已迁移。)输入文件的目录(定义为驱动器 + 路径);包括尾随反斜杠 (\)。 如果项目即输入,则此宏等同于 $(ProjectDir)
$(InputExt) (已迁移。)输入文件的文件扩展名。 文件扩展名之前包括“.”。 如果项目即输入,则此宏等同于 $(ProjectExt)。 对于源文件,它等同于 %(Extension)
$(InputFileName) (已迁移。)输入文件的文件名(定义为基名称 + 文件扩展名)。 如果项目即输入,则此宏等同于 $(ProjectFileName)。 对于源文件,它等同于 %(Identity)
$(InputName) (已迁移。)输入文件的基名称。 如果项目即输入,则此宏等同于 $(ProjectName)。 对于源文件,它等同于 %(Filename)
$(InputPath) (已迁移。)输入文件的绝对路径名称(定义为驱动器 + 路径 + 基名称 + 文件扩展名)。 如果项目即输入,则此宏等同于 $(ProjectPath)。 对于源文件,它等同于 %(FullPath)
$(ParentName) 包含此项目项的项的名称。 此宏是父文件夹的名称或项目名称。
$(SafeInputName) 作为有效类名称的文件名,去掉文件扩展名。 此属性没有确切的等效项。
$(SafeParentName) 有效名称格式中直接父级的名称。 例如,窗体是 .resx 文件的父级。 此属性没有确切的等效项。
$(SafeRootNamespace) 项目向导应在其中添加代码的命名空间名称。 此命名空间名仅包含有效的 C++ 标识符中允许的字符。 此属性没有确切的等效项。

另请参阅

Visual Studio 项目 - C++
Visual C++ 移植和升级指南
潜在的升级问题概述
MSBuild 常见的项元数据