CMP0126

在版本 3.21 中添加。

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

  • 之前不存在该名称的缓存变量。

  • 之前存在该名称的缓存变量,但它没有类型。当变量在命令行中使用类似 cmake -DMYVAR=blah 而不是 cmake -DMYVAR:STRING=blah 的形式设置时,可能会发生这种情况。

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

请注意,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 的未来版本中移除。