CMP0184¶
4.0 版本新增。
MSVC 运行时检查标志由抽象层选择。
面向 MSVC ABI 的编译器具有用于选择运行时检查的标志。运行时检查的选择通常随构建配置而变化。
在 CMake 3.31 及更低版本中,运行时检查标志由 CMake 自动添加到默认的 CMAKE_<LANG>_FLAGS_<CONFIG> 缓存条目中。这允许用户编辑其缓存条目以调整标志。然而,对于希望以编程方式选择不同运行时检查的项目来说,存在此类默认标志是有问题的。特别是,这要求在了解 CMake 内置默认值的情况下对 CMAKE_<LANG>_FLAGS_<CONFIG> 变量进行字符串编辑,以便能够替换它们。
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 中被移除。