CMP0120

在版本 3.20 中添加。

已移除 WriteCompilerDetectionHeader 模块。

CMake 版本 3.1 至 3.19 通过重新使用 CMake 对 cmake-compile-features(7) 预处理器检查表中的信息,提供了此模块以生成 C++ 兼容性层。不过

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

  • 该模块将 CMake 的一些实现细节直接暴露给 C++ 翻译单元。

  • 该模块的方法有效地向 CMake 提供一个头文件,从而将标头的版本绑定到 CMake 的版本。许多项目发现,最好通过使用最新版本的 CMake 手动生成本地标头,然后将其与项目源捆绑在一起,从而使用 WriteCompilerDetectionHeader

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

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

  • 使用第三方替代方案,例如 CC0 授权的 Hedley

  • 放弃对编译器过于老旧而无法提供本机特性的支持。

OLD 此策略的行为是包含弃用的 WriteCompilerDetectionHeader 模块以进行工作。 NEW 行为是包含该模块以失败,就像它不存在一样。

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

注意

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