cmake 政策(7)

介绍

CMake 中的策略用于跨多个版本保留向后兼容的行为。当引入新策略时,较新的 CMake 版本将开始警告有关向后兼容的行为。可以通过使用 cmake_policy() 命令明确请求旧的或向后兼容的行为来禁用警告。也可以为策略请求“NEW”或非向后兼容行为,同时避免警告。每个策略也可以在命令行上使用 CMAKE_POLICY_DEFAULT_CMP<NNNN> 变量显式设置为 NEWOLD 行为。

策略是一种弃用机制,而不是可靠的功能切换。策略几乎不应该设置为“旧”,除非在冻结或稳定的代码库中消除警告,或者暂时作为更大迁移路径的一部分。每个策略的“旧”行为都是不可取的,在未来的版本中将被替换为错误条件。

如果使用太旧版本的 CMake 构建项目,cmake_minimum_required 命令不仅仅会报告错误。它还将在该 CMake 版本或更早版本中引入的所有策略设置为“新”行为。要在不增加所需的最低 CMake 版本的情况下管理策略,可以使用 if(POLICY) 命令:

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

这具有将“NEW”行为与用户可能正在使用的较新 CMake 版本一起使用的效果,并且不会发出兼容性警告。

策略的设置在某些情况下被限制为不传播到父范围。例如,如果 include() 命令或 find_package() 命令读取的文件包含对 cmake_policy() 的使用,默认情况下该策略设置不会影响调用者。这两个命令都接受可选的 NO_POLICY_SCOPE 关键字来控制此行为。

CMAKE_MINIMUM_REQUIRED_VERSION 变量也可用于确定是否报告有关使用已弃用的宏或函数的错误。

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 引入的策略