cmake_policy 指令用于在 CMake 构建脚本中设置或查询特定的 CMake 策略。CMake 政策用于控制 CMake 在不同版本之间的行为更改,确保项目在使用不同版本的 CMake 时行为一致。
常用的 cmake_policy 子命令
- cmake_policy(VERSION major.minor[.patch]):
这会设置 CMake 的策略版本。通过设置策略版本,CMake 会自动为该版本之前引入的所有策略设置适当的行为。通常在项目的顶层 CMakeLists.txt 文件中使用,例如:
cmake_minimum_required(VERSION 3.15)
cmake_policy(VERSION 3.15)
- cmake_policy(SET CMP NEW|OLD):
该命令设置一个特定的策略为 NEW 或 OLD 行为。CMP 是政策的编号,例如 CMP0074。
- NEW: 使用新的行为。
- OLD: 使用旧的行为。
示例:
cmake_policy(SET CMP0074 NEW)
- cmake_policy(GET CMP variable):
该命令用于查询某个特定策略当前的状态,并将结果存储在变量中。
示例:
cmake_policy(GET CMP0074 status)
message(STATUS "CMP0074 status is: ${status}")
- cmake_policy(PUSH) 和 cmake_policy(POP):
这些命令用于保存和恢复当前的策略设置,允许在 CMake 脚本的某一部分临时更改策略而不会影响到其他部分。
示例:
cmake_policy(PUSH)
cmake_policy(SET CMP0074 OLD)
# 临时使用旧行为的代码块
cmake_policy(POP)
# 恢复到之前的策略设置
CMake 策略的作用
不同的 CMake 版本可能引入新的行为,旧版本中可能不存在或者行为不同。通过使用 cmake_policy,开发者可以确保项目在不同版本的 CMake 中构建时,行为是一致的,从而避免因 CMake 版本升级而引入的潜在问题。