CMP0184

4.0 版本新增。

MSVC 运行时检查标志由一个抽象层来选择。

针对 MSVC ABI 的编译器具有选择运行时检查的标志。运行时检查的选择通常随构建配置而变化。

在 CMake 3.31 及更早版本中,CMake 会自动将运行时检查标志添加到默认的 CMAKE_<LANG>_FLAGS_<CONFIG> 缓存条目中。这允许用户编辑他们的缓存条目来调整标志。然而,这种默认标志的存在对于希望以编程方式选择不同运行时检查的项目来说是有问题的。特别是,它需要对 CMAKE_<LANG>_FLAGS_<CONFIG> 变量进行字符串编辑,并且需要了解 CMake 内置的默认值,以便可以替换它们。

CMake 4.0 及更高版本倾向于将运行时检查标志排除在默认的 CMAKE_<LANG>_FLAGS_<CONFIG> 值之外,而是提供一个一流的抽象。可以使用 CMAKE_MSVC_RUNTIME_CHECKS 变量和 MSVC_RUNTIME_CHECKS 目标属性来选择 MSVC 运行时检查。如果它们未设置,CMake 将仅为 Debug 配置启用运行时检查,使用默认值 $<$<CONFIG:Debug>:StackFrameErrorCheck;UninitializedVariable>(如果编译器支持),否则为空值。

此策略旨在兼容尚未更新为识别此抽象的项目。策略设置从第一个启用 MSVC ABI 目标语言的 project()enable_language() 命令开始生效。

注意

一旦策略在项目顶部生效,该选择将在整个项目中生效。在包含嵌套项目的子目录的项目中,请务必确认所有内容是否与选定的策略行为一致。

此策略的 OLD 行为是将 MSVC 运行时检查标志放入默认的 CMAKE_<LANG>_FLAGS_<CONFIG> 缓存条目中,并忽略 CMAKE_MSVC_RUNTIME_CHECKS 抽象。此策略的 NEW 行为是将 MSVC 运行时检查标志放入默认缓存条目中,而是使用抽象层。

此策略引入于 CMake 版本 4.0。可以通过 cmake_policy()cmake_minimum_required() 设置。如果未设置,CMake *不会* 警告,并使用 OLD 行为。

注意

策略的 OLD 行为 根据定义已被弃用,并可能在未来的 CMake 版本中被移除。