cmake-policies(7)

简介

CMake 中的策略用于跨多个版本保留向后兼容行为。如果引入一项新策略,较新版本的 CMake 将开始对向后兼容行为发出警告。可以请求显式启用 cmake_policy() 命令的 OLD(向后兼容)行为,以禁用警告。还可以要求对策略采用 NEW(不向后兼容)行为,也可以避免发出警告。还可以使用 CMAKE_POLICY_DEFAULT_CMP<NNNN> 变量通过命令行明确将每项策略设置为 NEWOLD 行为。

策略是一种弃用机制,而不是可靠的功能切换。几乎不应该设置策略 OLD,但可以用来消除冻结或稳定的代码库的警告,也可以暂时用作更大迁移路径的一部分。每项策略的 OLD 行为都不理想,而且将在将来的版本中被错误情况取代。

如果用老版本的 CMake 构建项目时,cmake_minimum_required() 命令不止报告报错,还会将该 CMake 版本或更早版本中引入的所有策略设置为 NEW 行为。为管理那些策略,无需增加最低要求的 CMake 版本,可以采用 if(POLICY) 命令

if(POLICY CMP0990)
  cmake_policy(SET CMP0990 NEW)
endif()

这样一来,较新版本的 CMake(用户可能在使用,而且未发出兼容性警告)可以用 NEW 行为。

在某些情况下,策略的设置限定在其父作用域能不传播。例如,如果 include() 命令或 find_package() 命令读取的文件包含有 cmake_policy() 的使用情况,那么默认情况下,该策略设置不会影响调用者。这两个命令都接受一个可选项 NO_POLICY_SCOPE 关键字来控制这种行为。

CMAKE_MINIMUM_REQUIRED_VERSION 变量还可以用来确定是否报告那些弃用宏或函数的使用情况错误。

CMake 3.31 引入的策略

CMake 3.30 引入的策略

CMake 3.29 引入的策略

CMake 3.28 引入的策略

CMake 3.27 引入的策略

CMake 3.26 引入的策略

CMake 3.25 引入的策略

CMake 3.24 引入的策略

CMake 3.23 引入的策略

CMake 3.22 引入的策略

由CMake 3.21 引入的策略

由 CMake 3.20 引入的策略

由 CMake 3.19 引入的策略

由 CMake 3.18 引入的策略

由 CMake 3.17 引入的策略

由 CMake 3.16 引入的策略

由 CMake 3.15 引入的策略

由 CMake 3.14 引入的策略

CMake 3.13 引入的策略

CMake 3.12 引入的策略

CMake 3.11 引入的策略

CMake 3.10 引入的策略

CMake 3.9 引入的策略

CMake 3.8 引入的策略

CMake 3.7 引入的策略

CMake 3.4 引入的策略

CMake 3.3 引入的策略

CMake 3.2 引入的策略

CMake 3.1 引入的策略

CMake 3.0 引入的策略

CMake 2.8 引入的策略

CMake 2.6 引入的策略