CMP0120¶
在 3.20 版本加入.
WriteCompilerDetectionHeader 模块已删除。
CMake 版本 3.1 到 3.19 提供此模块,通过重新使用 CMake 的预处理器检查表中的信息来生成 C++ 兼容层:manual:cmake-compile-features(7)。然而:
这些细粒度特性已被元特性所取代:ref:Requiring Language Standards 例如``cxx_std_11``。因此,不会添加新的细粒度功能检查,项目将需要使用其他方式有条件地使用新的 C++ 功能。
该模块将 CMake 的一些实现细节直接暴露给 C++ 翻译单元。
该模块的方法有效地为 CMake 提供了一个头文件,从而将头文件的版本与 CMake 的版本联系起来。许多项目发现:module:WriteCompilerDetectionHeader 的最佳使用方法是使用最新版本的 CMake 在本地手动生成其标头,然后将其与项目源捆绑在一起,以便它可以与旧 CMake 版本一起使用。
由于上述原因,CMake 3.20 及更高版本倾向于不提供 WriteCompilerDetectionHeader 模块。此策略为尚未从中移植的项目提供兼容性。使用该模块的项目应该更新以停止使用它。备选方案包括:
在项目的源代码中捆绑生成的标头的副本。
使用第三方替代方案,例如 CC0 许可的“Hedley”。
放弃对太旧而无法提供本机功能的编译器的支持。
此策略的“旧”行为是为了包含已弃用的 WriteCompilerDetectionHeader 模块。 NEW 行为是为了包含模块失败,就好像它不存在一样。
此策略是在 CMake 版本 3.20 中引入的。 CMake 版本 |发布|当未设置策略并使用“旧”行为时发出警告。使用 cmake_policy() 命令将其显式设置为 OLD 或 NEW。
备注
策略的“旧”行为是 :manual:根据定义 <cmake-policies(7)> 已弃用,并且可能会在未来版本的 CMake 中删除。