CMP0120

在 3.20 版本中添加。

移除了 WriteCompilerDetectionHeader 模块。

CMake 3.1 到 3.19 版本提供了此模块,通过重用 CMake 的预处理器检查表中的信息,为 cmake-compile-features(7) 生成 C++ 兼容层。然而

  • 这些细粒度特性已被 语言标准要求 的元特性所取代,例如 cxx_std_11。因此,不会添加新的细粒度特性检查,项目将需要使用其他方法来有条件地使用新的 C++ 特性。

  • 该模块直接向 C++ 翻译单元公开了 CMake 的一些实现细节。

  • 该模块的方法实际上为 CMake 提供了一个头文件,从而将头文件的版本与 CMake 的版本绑定在一起。许多项目发现,WriteCompilerDetectionHeader 的最佳使用方式是在本地使用最新版本的 CMake 手动生成其头文件,然后将其与项目源代码捆绑在一起,以便可以在旧版本的 CMake 中使用它。

由于包括上述原因在内,CMake 3.20 及更高版本倾向于不提供 WriteCompilerDetectionHeader 模块。此策略为尚未从中移植出来的项目提供兼容性。使用该模块的项目应更新为停止使用它。替代方案包括

  • 将生成的头文件副本捆绑在项目源代码中。

  • 使用第三方替代方案,例如 CC0 许可的 Hedley

  • 放弃对过旧而无法原生提供这些特性的编译器的支持。

此策略的 OLD 行为是为了使包含已弃用的 WriteCompilerDetectionHeader 模块能够工作。NEW 行为是使模块的包含失败,就好像它不存在一样。

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

注意

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