CMP0180

在 3.31 版本中添加。

project() 通常将 <PROJECT-NAME>_* 设置为普通变量。

在 CMake 3.29 及更低版本中,project() 命令将 <PROJECT-NAME>_SOURCE_DIR<PROJECT-NAME>_BINARY_DIR<PROJECT-NAME>_IS_TOP_LEVEL 设置为缓存条目,但不是作为普通变量。CMake 3.30 开始将它们设置为正常变量,但仅当它们已设置为正常变量时。这样做是为了保留对某些 FetchContent 使用案例的支持,这些案例在 CMP0169 的新行为下,同时还可以保留调用 project() 且项目名称相同嵌套目录的行为。有关详细信息,请参阅版本 3.30.3、3.30.4 和 3.30.5 的发行说明。

CMake 3.31 及更高版本通常喜欢始终设置 <PROJECT-NAME>_SOURCE_DIR<PROJECT-NAME>_BINARY_DIR<PROJECT-NAME>_IS_TOP_LEVEL,无论已经存在什么缓存或普通变量,都将它们设置为缓存条目和普通变量。此策略为尚未更新为预期此行为的项目提供兼容性。

此策略的 OLD 行为仅当 project() 已被调用时,已经有一个名为 <PROJECT-NAME>_SOURCE_DIR<PROJECT-NAME>_BINARY_DIR<PROJECT-NAME>_IS_TOP_LEVEL 的常规变量时,才会为此策略设置常规变量。此策略的 NEW 行为在 project() 被调用后,始终会为此策略设置 <PROJECT-NAME>_SOURCE_DIR<PROJECT-NAME>_BINARY_DIR<PROJECT-NAME>_IS_TOP_LEVEL 的常规变量。

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

说明

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