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