CMP0102

在 3.17 版本中添加。

在不存在缓存项的情况下,mark_as_advanced() 命令将不再创建缓存项。

在 CMake 3.16 及更早版本中,如果一个变量根本没有定义,或者只是在本地定义的,mark_as_advanced() 命令会创建一个具有 UNINITIALIZED 类型且没有值的缓存项。当 find_path()(或其他类似的 find_ 命令)下次运行时,它会找到这个未定义的缓存项,并将其设置为空字符串值。此过程最终会删除本地变量(由于缓存的工作方式),从而有效地清除任何仅在本地作用域中可用的已存储 find_ 结果。

此策略的 OLD 行为是创建空缓存定义。此策略的 NEW 行为是忽略缓存中尚不存在的变量。

此策略已在 CMake 版本 3.17 中引入。它可以由 cmake_policy()cmake_minimum_required() 设置。如果未设置,CMake 默认不会发出警告,并使用 OLD 行为。

有关控制警告的信息,请参阅 CMAKE_POLICY_WARNING_CMP0102 变量的文档。

注意

策略的 OLD 行为根据定义已被弃用,并可能在未来的 CMake 版本中被移除。