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>

此策略提供与尚未更新以了解抽象的项目的兼容性。该策略设置从第一个 project()enable_language() 命令开始生效,该命令启用其编译器以 MSVC ABI 为目标的语言。

备注

一旦该策略在项目的顶部生效,该选择将在整个树中使用。在子目录中有嵌套项目的项目中,请务必确认所有内容是否都适用于选定的策略行为。

此策略的“旧”行为是将 MSVC 调试信息格式标志放置在默认的 CMAKE_<LANG>_FLAGS_<CONFIG> 缓存条目中,并忽略 CMAKE_MSVC_DEBUG_INFORMATION_FORMAT 抽象。此策略的“新”行为是*不*将 MSVC 调试信息格式标志放在默认缓存条目中,而是使用抽象。

此策略是在 CMake 版本 3.25 中引入的。使用 cmake_policy() 命令将其显式设置为 OLDNEW。与许多政策不同,CMake 版本 |release|当此策略未设置且仅使用“旧”行为时*不*发出警告。

备注

策略的“旧”行为是 :manual:根据定义 <cmake-policies(7)> 已弃用,并且可能会在未来版本的 CMake 中删除。