CMP0141

在 3.25 版本中新增。

MSVC 调试信息格式标志由一个抽象层选择。

针对 MSVC ABI 的编译器具有选择调试信息格式的标志。调试信息格式的选择通常随构建配置而变化。

在 CMake 3.24 及更早版本中,调试信息格式标志会自动添加到默认的 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 中被移除。