CMP0150

在 3.27 版本中新增。

ExternalProject_Add()FetchContent_Declare() 命令将相对的 GIT_REPOSITORY 路径视为相对于父项目的远程仓库。

这些命令的早期版本始终将 GIT_REPOSITORY 中的相对路径视为本地路径,但其相对的基础目录既未文档化也令人费解。此策略的 OLD 行为是将用于 GIT_REPOSITORY 的相对路径解释为相对于以下内容的本地路径:

NEW 行为是确定父项目的远程仓库,并将路径相对于该远程仓库进行解释。在调用 ExternalProject_Add()FetchContent_Declare()CMAKE_CURRENT_SOURCE_DIR 的值决定了父项目。根据以下规则选择远程仓库(第一个匹配即使用):

  • 如果父项目在具有已定义上游远程仓库的分支上检出,则使用该远程仓库。

  • 如果只定义了一个远程仓库,则使用该远程仓库。

  • 如果定义了多个远程仓库,并且其中一个名为 origin,则使用 origin 的远程仓库,但同时会发出警告。

如果根据上述规则无法确定合适的远程仓库,则会引发致命错误。

此策略在 CMake 版本 3.27 中引入。可以通过 cmake_policy()cmake_minimum_required() 设置。如果未设置,CMake 在遇到相对路径时会发出警告,并使用 OLD 行为。

注意

cmake-policies(7) 中,策略的 OLD 行为是按定义弃用,并可能在未来的 CMake 版本中移除。