CMP0141¶
在 3.25 版本中新增。
MSVC 调试信息格式标志由抽象层选择。
针对 MSVC ABI 的编译器有用于选择调试信息格式的标志。调试信息格式的选择通常随构建配置而变化。
在 CMake 3.24 及更早版本中,CMake 会自动将调试信息格式标志添加到默认的 CMAKE_<LANG>_FLAGS_<CONFIG>
缓存条目中。这允许用户编辑其缓存条目以调整这些标志。然而,对于希望以编程方式选择不同调试信息格式的项目来说,这种默认标志的存在是有问题的。特别是,它要求用户在了解 CMake 内置默认值的情况下,对 CMAKE_<LANG>_FLAGS_<CONFIG>
变量进行字符串编辑,以便替换它们。
CMake 3.25 及更高版本倾向于将调试信息格式标志排除在默认的 CMAKE_<LANG>_FLAGS_<CONFIG>
值之外,而是提供一流的抽象。可以使用 CMAKE_MSVC_DEBUG_INFORMATION_FORMAT
变量和 MSVC_DEBUG_INFORMATION_FORMAT
目标属性来选择 MSVC 调试信息格式。如果它们未设置,CMake 将在调试配置中启用调试信息,使用默认值 $<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>
(如果编译器支持),否则使用 $<$<CONFIG:Debug,RelWithDebInfo>:Embedded>
。
此策略为未更新以感知此抽象的项目提供了兼容性。该策略的设置从第一个启用了针对 MSVC ABI 的语言的 project()
或 enable_language()
命令开始生效。
注意
一旦策略在项目顶层生效,该选择将在整个树中生效。在具有嵌套子项目的项目中,请务必确认所有内容是否都与所选的策略行为一致。
此策略的 OLD
行为是将 MSVC 调试信息格式标志放入默认的 CMAKE_<LANG>_FLAGS_<CONFIG>
缓存条目中,并忽略 CMAKE_MSVC_DEBUG_INFORMATION_FORMAT
抽象。此策略的 NEW
行为是不将 MSVC 调试信息格式标志放入默认缓存条目中,而是使用抽象层。
此策略在 CMake 版本 3.25 中引入。它可以由 cmake_policy()
或 cmake_minimum_required()
设置。如果未设置,CMake 将不发出警告,而是使用 OLD
行为。
注意
策略的 OLD
行为是默认弃用
,并且可能在未来的 CMake 版本中被移除。