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