CMP0117

在 3.20 版本加入.

默认情况下,MSVC RTTI 标志 /GR 未添加到 CMAKE_CXX_FLAGS

在 CMake 3.19 及更低版本中使用类似 MSVC 的编译器时,RTTI 标志 /GR 默认添加到 CMAKE_CXX_FLAGS。此行为是由于对 Visual Studio 2003 及以下版本的 MSVC 版本的支持而遗留的,默认情况下未启用 RTTI。不再需要了。此外,对于想要以编程方式更改为“/GR-”的项目来说,这是有问题的。特别是,它需要使用 CMake 内置默认值知识对 CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS> 变量进行字符串编辑,以便可以替换它。

默认情况下,CMake 3.20 及更高版本倾向于从 CMAKE_CXX_FLAGS 的值中省略 /GR

此策略提供与尚未更新的项目的兼容性,以预期缺少 /GR 标志。策略设置从初始化 CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS> 的第一个 project()enable_language() 命令开始生效。

备注

一旦该策略在给定语言的项目顶部生效,该选择必须在该语言的整个树中使用。在子目录中具有嵌套项目的项目中,请确保将所有内容一起转换。

此策略的 OLD 行为是将 MSVC /GR 标志放置在默认的 CMAKE_CXX_FLAGS 缓存条目中。此策略的“新”行为是*不*将 MSVC /GR 标志放在默认缓存条目中。

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

备注

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