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_CXX_FLAGS 变量进行字符串编辑,并了解 CMake 内建的默认值,以便可以替换它。

CMake 3.20 及更高版本默认情况下倾向于不将 /GR 添加到 CMAKE_CXX_FLAGS 的值中。

此策略提供了与未更新到期望缺少 /GR 标志的项目兼容性。策略设置从第一个初始化 CMAKE_CXX_FLAGSproject()enable_language() 命令开始生效。

注意

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

此策略的 OLD 行为是将 MSVC /GR 标志放入默认的 CMAKE_CXX_FLAGS 缓存条目。此策略的 NEW 行为是 *不* 将 MSVC /GR 标志放入默认缓存条目。

此策略在 CMake 版本 3.20 中引入。它可以由 cmake_policy()cmake_minimum_required() 设置。如果未设置,CMake *不* 会发出警告,并使用 OLD 行为。

注意

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