CMP0184¶
在版本 4.0 中添加。
MSVC 运行时检查标志由抽象概念选择。
面向 MSVC ABI 的编译器具有选择运行时检查的标志。运行时检查选择通常随构建配置而变化。
在 CMake 3.31 及更低版本中,运行时检查标志会自动添加到默认的 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 的未来版本中删除。