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 标志缺失的项目兼容性。策略设置从第一次初始化 project()enable_language() 命令开始生效。

注意

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

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

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

注意

根据定义,策略的 OLD 行为是不推荐使用的,并且可能会在未来的 CMake 版本中移除。