设置编译器和生成属性

在 IDE 中,属性公开生成项目所需的信息。 此信息包括应用程序名称、扩展名(如 DLL、LIB、EXE)、编译器选项、链接器选项、调试器设置、自定义生成步骤和许多其他操作。 通常情况下,可使用“属性页”来查看和修改这些属性。 要访问属性页,请从主菜单中选择“项目”>“project-name 属性”,或右键单击“解决方案资源管理器”中的项目节点,并选择“属性”

默认属性

创建项目时,系统分配各种属性的值。 根据项目类型和在应用向导中所选的选项类型,默认值会有所不同。 例如,ATL 项目具有与 MIDL 文件相关的属性,但这些属性在基本控制台应用程序中都不存在。 默认属性在属性页的“常规”窗格中显示:

Visual Studio 项目属性对话框的屏幕截图。

“常规”页已打开。 已突出显示“项目默认值”部分,其中包括“配置类型”设置为“应用程序 (.exe)”、“MFC 的使用”设置为“使用标准 Windows 库”、“字符集”为 Unicode、“公共语言运行时支持”设置为“无公共语言运行时支持”、“整个程序优化”设置为“无全程序优化”,Windows Store APP 支持设置为“否”。

将属性应用到生成配置和目标平台

某些属性(例如应用程序名称)会应用于所有生成变量和目标平台,而不考虑是调试还是发布版本。 但是大多数属性都依赖于配置。 为了生成正确的代码,编译器必须知道程序将在哪个特定平台上运行,以及要使用哪些特定编译器选项。 因此,设置属性时,请务必注意新值应应用于哪个配置和平台。 它应该仅应用于调试 Win32 版本还是也应用于调试 ARM64 和调试 x64 版本? 例如,默认情况下,“优化”属性在版本配置中设为“最大化速度(/O2)”,但在调试配置中禁用

始终可以查看和更改属性值应应用于的配置和平台。 下图显示了顶部带有配置和平台信息控件的属性页。 在此处设置“优化”属性时,它将仅应用于调试 Win32 版本,即当前活动的配置,如红色箭头所示。

Visual Studio“属性页”对话框的屏幕截图。

系统会打开 C/C++ 下的“优化”页面。 优化设置被设置为“禁用”(/Od),即被停止运行。箭头指出项目属性页中的配置设置(设置为 Active(调试))与工具栏上的解决方案配置下拉列表中的设置(设置为调试)之间的关系。 另一个箭头指出项目属性页中的平台设置(设置为 Active (Win32))与工具栏上的解决方案平台下拉列表中的设置(设置为 x86)之间的关系。

下图显示相同的项目属性页,但该配置已更改为发布。 请注意“优化”属性的不同值。 另请注意,活动配置仍是调试。 可以在此处设置任何配置的属性;它不必处于活动状态。

Visual Studio 项目“属性页”对话框的屏幕截图。将调出“配置”下拉列表并将其设置为“发布”。在 C/C++ 的“>优化>”下,将“优化设置”设为“将速度最大化 (/O2)”。

目标平台

目标平台是指可执行文件将在此之上运行的各种设备和操作系统。 可以生成多个平台的项目。 C++ 项目的可用目标平台取决于项目的类型。 它们包括但不限于 Win32、x64、ARM、ARM64、Android 和 iOS。 可能在 Configuration Manager 中看到的 x86 目标平台等同于本机 C++ 项目中的 Win32。 Win32 意味着 32 位的 Windows,而 x64 意味着 64 位的 Windows。 有关这两个平台的详细信息,请参阅运行 32 位的应用程序

可能在“Configuration Manager”中看到的“任何 CPU”目标平台值对本机 C++ 项目没有影响。 它仅与 C++/CLI 和其他 .NET 项目类型相关。 有关详细信息,请参阅/CLRIMAGETYPE(指定 CLR 映像的类型)

有关设置调试内部版本的属性的详细信息,请参阅:

C++ 编译器和链接器选项

C++ 编译器和链接器选项位于“配置属性”下左侧窗格中的 C/C++ 和“链接器”节点下。 这些选项直接转换为将传递给编译器的命令行选项。 如需阅读有关特定选项的文档,请在中心窗格中选择该选项,然后按 F1。 也可浏览 MSVC 编译器选项MSVC 链接器选项中所有选项的文档。

“属性页”对话框仅显示与当前项目相关的属性页。 例如,如果项目没有 .idl 文件,则不会显示 MIDL 属性页。 有关每个属性页中的设置的详细信息,请参阅属性页 (C++)

目录和路径值

MSBuild 支持对某些字符串值(例如包含目录和路径)使用称为宏的编译时常量。 宏可以引用由 Visual Studio 或 MSBuild 系统定义的值,也可以引用用户定义的值。 宏类似于 $(macro-name)%(item-macro-name)。 它们公开在属性页中,你可以使用属性编辑器在其中对它们进行引用和修改。 使用宏而不是硬编码的值,例如目录路径。 通过宏,可以更轻松地在计算机之间和 Visual Studio 版本之间共享属性设置。 此外,可以更好地确保项目设置能正确参与属性继承

下图显示了 Visual Studio C++ 项目的属性页。 在左窗格中,选中“VC++ 目录”规则,右窗格中即会列出与该规则关联的属性。 属性值通常是宏,例如 $(VC_SourcePath)

Visual Studio 属性页对话框的屏幕截图,显示各种目录的规则。

VC ++ 目录页面已打开,其中包含 VC++ 目录规则的属性。 示例规则是源目录,该目录设置为 $(VC_SourcePath)。 包含目录、库目录、可执行目录等规则。

可使用属性编辑器查看所有可用宏的值。

预定义宏

  • 全局宏
    全局宏应用于项目配置中的所有项。 全局宏具有语法 $(name)。 全局宏的示例是 $(VCInstallDir),它存储 Visual Studio 安装的根目录。 全局宏与 MSBuild 中的 PropertyGroup 相对应。

  • 项宏
    项宏具有语法 %(name)。 对于文件来说,仅适用于该文件的项宏,例如可以使用 %(AdditionalIncludeDirectories) 来指定仅适用于特定文件的包含目录。 这种项宏与 MSBuild 中的 ItemGroup 元数据相对应。 当在项目配置的上下文中使用时,项目宏适用于特定类型的所有文件。 例如,C/C++“预处理器定义”配置属性可以采用适用于项目中所有 .cpp 文件的 %(PreprocessorDefinitions) 项宏。 这种项宏与 MSBuild 中的 ItemDefinitionGroup 元数据相对应。 有关详细信息,请参阅项定义

用户定义的宏

你可以创建用户定义的宏,以便在项目生成中将宏用作变量。 例如,可以创建一个用户定义的宏来提供自定义生成步骤或自定义生成工具的值。 用户定义的宏是名称/值对。 在项目文件中,使用 $(name) 表示法访问该值。

用户定义的宏存储在属性表中。 如果项目尚未包含属性表,可以按照共享或重用 Visual Studio 项目设置中的步骤创建一个。

创建用户定义的宏

  1. 打开“属性管理器”窗口。 (在菜单栏上,选择“查看”>“属性管理器”或“查看”>“其他 Windows”>“属性管理器”。)打开属性表的快捷菜单(其名称以 .user 结尾),然后选择“属性”。 此时将打开该属性表的“属性页”对话框

  2. 在对话框的左窗格中,选择“用户宏”。 在右窗格中,选择“添加宏”按钮,打开“添加用户宏”对话框

  3. 在对话框中,指定宏的名称和值。 根据需要,选中“将此宏设置为生成环境中的环境变量”复选框

属性编辑器

你可以使用属性编辑器来修改特定字符串属性,选择宏作为值。 若要访问“属性编辑器”,在属性页中选择属性,然后选择右侧的向下箭头按钮。 如果下拉列表包含“<编辑>”,那么可以选择它来显示该属性的属性编辑器

VC ++ 目录的 Visual Studio 项目属性页的屏幕截图。

“包含目录”设置的属性编辑器已打开。 其中显示包含目录的评估值,即 C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\Include。 它显示两个继承值:$(VC_IncludePath) 和$(WindowsSDK_IncludePath)。 选中“继承自父级或项目默认值”复选框。

在属性编辑器中,可以选择“宏”按钮查看可用宏及这些宏的当前值。 下图显示选中“宏”按钮后,“附加包含目录”属性的属性编辑器。 如果选中“从父级或项目默认设置继承”复选框并添加了新值,则该值会附加到当前被继承的任意值。 如果清除复选框,则新值会替换继承值。 在大多数情况下,选中复选框。

选择“宏”按钮后,“属性编辑器”对话框的屏幕截图。

“包含目录”的属性编辑器已打开。 系统一同显示计算的值与继承的值。 列表框包含各种宏及其值,例如设置为 Unicode 的 $(CharacterSet)。

将包含目录添加到默认目录集

在将包含目录添加到项目中时,请勿替代所有默认目录,这点非常重要。 添加目录的正确方法是追加新路径,例如“C:\MyNewIncludeDir\”,然后将 $(IncludePath) 宏追加到属性值。

快速浏览和搜索所有属性

“所有选项”属性页(在“属性页”对话框中“配置属性”>“C/C++”节点下)可实现快速浏览和搜索当前上下文中可用的属性。 它具有特殊的搜索框和简单的语法,能够帮助你筛选结果:

无前缀:
仅在属性名称中搜索(不区分大小写的子字符串)。

/”或“-”:
仅在编译器开关中搜索(不区分大小写的前缀)

v
仅在值中搜索(不区分大小写的子字符串)。

设置生成的环境变量

MSVC 编译器 (cl.exe) 可识别某些环境变量,特别是 LIBLIBPATHPATHINCLUDE。 使用 IDE 生成时,VC++ 目录属性页中设置的属性用于设置那些环境变量。 如果 LIBLIBPATHINCLUDE 值已设置(例如通过开发人员命令提示设置),则它们将替换为相应 MSBuild 属性的值。 然后,生成会将 VC++ 目录可执行目录属性的值追加到 PATH。 你可以通过创建用户定义的宏然后选中显示“在生成环境中将此宏设置为环境变量”的框来设置用户定义的环境变量

设置调试会话的环境变量

在项目“属性页”对话框的左窗格中,展开“配置属性”,然后选择“调试”

在右窗格中,修改“环境”或“合并环境”项目设置,然后选择“确定”按钮

本节内容

共享或重用 Visual Studio 项目设置
如何使用可共享或重复使用的自定义生成设置创建 .props 文件。

项目属性继承
描述生成过程中 .props.targets.vcxproj 文件和环境变量的计算顺序。

在不更改项目文件的情况下修改属性和目标
如何在不修改项目文件的情况下创建临时生成设置。

另请参阅

Visual Studio 项目 - C++
.vcxproj.props 文件结构
属性页 XML 文件