CMP0102

在 3.17 版本加入.

mark_as_advanced() 命令不再创建不存在的缓存条目。

在 CMake 3.16 及以下版本中,如果变量根本未定义或仅在本地定义,则 mark_as_advanced() 命令将创建一个具有 UNINITIALIZED 类型且没有值的新缓存条目。当 find_path`(或其他类似的 ``find_`() 命令)下次运行时,它会找到这个未定义的缓存条目并将其设置为空字符串值。这个过程最终会删除过程中的局部变量(由于缓存的工作方式),有效地清除所有仅在局部范围内可用的存储的“find_”结果。

此策略的“旧”行为是创建空缓存定义。此策略的“新”行为是忽略缓存中尚不存在的变量。

此策略是在 CMake 版本 3.17 中引入的。使用 cmake_policy() 命令将其显式设置为 OLDNEW。与许多政策不同,CMake 版本 |release|当此策略未设置且仅使用“旧”行为时*不*发出警告。请参阅 CMAKE_POLICY_WARNING_CMP0102 变量的文档以控制警告。

备注

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