CMP0126

在版本 3.21 中添加。

当此策略设置为 NEW 时,set(CACHE) 命令不会从当前作用域中移除任何同名普通变量。 在下列情况下,OLD 行为会从当前作用域中移除任何同名普通变量:

  • 以前不存在同名缓存变量。

  • 以前存在同名缓存变量,但它没有类型。 当使用类似于 cmake -DMYVAR=blah 的表单在命令行上设置变量时,可能会出现这种情况,而不是 cmake -DMYVAR:STRING=blah

  • 在设置缓存变量时使用了 FORCEINTERNAL 关键字。

请注意,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 版本中可能会被移除。