CMP0126

在 3.21 版本加入.

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

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

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

  • 设置缓存变量时使用了``FORCE`` 或``INTERNAL`` 关键字。

请注意,NEW 行为与策略的类似``NEW`` 行为有重要区别 CMP0077set(CACHE) 命令总是设置缓存变量,如果它以前不存在,不管``CMP0126`` 策略设置。如果同名的非缓存变量已经存在并且 CMP0077 设置为 NEW,则 option() 命令将 设置缓存变量。

CMake 版本 3.21 中引入了策略“CMP0126”。使用 cmake_policy() 命令在项目中明确地将其设置为 OLDNEW。使用 CMAKE_POLICY_DEFAULT_CMP0126 变量为子目录中的第三方项目设置策略而不修改它。与许多政策不同,CMake 版本 |release|当政策未设置时 发出警告,只是使用“旧”行为。请参阅 CMAKE_POLICY_WARNING_CMP0126 变量的文档以控制警告。

备注

策略的“旧”行为是 :manual:根据定义 <cmake-policies(7)> 已弃用,并且可能会在未来版本的 CMake 中删除。