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