CMP0120¶
在 3.20 版本中添加。
WriteCompilerDetectionHeader 模块已被移除。
CMake 3.1 到 3.19 版本提供了此模块,通过重用 CMake 的预处理器检查表中的信息来生成 C++ 兼容层,以支持 cmake-compile-features(7)。然而,
这些细粒度的功能已被 指定语言标准 的元功能所取代,例如
cxx_std_11。因此,不会再添加新的细粒度功能检查,项目需要使用其他方式来有条件地使用新的 C++ 功能。该模块直接将 CMake 的一些实现细节暴露给 C++ 翻译单元。
该模块的方法有效地提供了一个带有 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 版本中被移除。