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 中删除。