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()
命令起,立即生效。
注意
当策略在项目的顶部生效之后,将在整个树中使用选择。对于在子目录中嵌套项目的项目,一定要确认是否所有项目都符合所选的策略行为。
该策略的旧
行为是将 MSVC 调试信息格式标志置于默认CMAKE_<LANG>_FLAGS_<CONFIG>
高速缓存条目中并忽略CMAKE_MSVC_DEBUG_INFORMATION_FORMAT
抽象。此策略的新
行为是不将 MSVC 调试信息格式标志置于默认高速缓存条目中,而是使用抽象。
此策略在 CMake 版本 3.25 中引入。它可能已由cmake_policy()
或cmake_minimum_required()
设置。如果它未被设置,CMake 不会发出警告,并使用旧
行为。
注意
策略的旧
行为是已通过定义 弃用
并可能在未来版本的 CMake 中移除。