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 版本中被移除。