CMP0126¶
3.21 版本新增。
当此策略设置为 NEW 时,set(CACHE) 命令不会从当前作用域中移除同名的普通变量。在以下情况下,OLD 行为会从当前作用域中移除同名的普通变量:
先前不存在该名称的缓存变量。
先前存在该名称的缓存变量,但它没有类型。当使用类似
cmake -DMYVAR=blah而非cmake -DMYVAR:STRING=blah的形式在命令行中设置变量时,可能会发生这种情况。设置缓存变量时使用了
FORCE或INTERNAL关键字。
请注意,NEW 行为与策略 CMP0077 的类似 NEW 行为存在重要区别。无论 CMP0126 策略设置如何,set(CACHE) 命令始终会设置以前不存在的缓存变量。如果同名的非缓存变量已存在且 CMP0077 设置为 NEW,则 option() 命令将 _不会_ 设置缓存变量。
此策略在 CMake 版本 3.21 中引入。可以通过 cmake_policy() 或 cmake_minimum_required() 来设置。如果未设置,CMake 默认 _不会_ 警告,并使用 OLD 行为。
有关控制警告的信息,请参见 CMAKE_POLICY_WARNING_CMP0126 变量的文档。
可以使用 CMAKE_POLICY_DEFAULT_CMP0126 变量来为子目录中的第三方项目设置策略,而无需修改它。
注意
策略的 OLD 行为 根据定义已被弃用,并可能在未来的 CMake 版本中被移除。