CMP0150¶
在 3.27 版本中新增。
ExternalProject_Add() 和 FetchContent_Declare() 命令将 GIT_REPOSITORY 的相对路径视为相对于父项目的远程仓库。
这些命令的早期版本总是将 GIT_REPOSITORY 中的相对路径视为本地路径,但其被视为相对的基目录既未被文档说明也非直观。此策略的 OLD 行为是将用于 GIT_REPOSITORY 的相对路径解释为相对于以下内容的本地路径:
对于
ExternalProject_Add(),SOURCE_DIR的父目录。对于
FetchContent_Declare(),FETCHCONTENT_BASE_DIR。
NEW 行为是确定父项目的远程仓库,并将路径相对于该远程仓库进行解释。当调用 ExternalProject_Add() 或 FetchContent_Declare() 时 CMAKE_CURRENT_SOURCE_DIR 的值确定父项目。根据以下规则选择远程仓库(找到第一个匹配项即使用):
如果父项目在已定义上游远程分支的分支上签出,则使用该远程仓库。
如果只定义了一个远程仓库,则使用该远程仓库。
如果定义了多个远程仓库,并且其中一个命名为
origin,则使用origin的远程仓库,但同时会发出警告。
如果无法根据上述规则确定合适的远程仓库,则会引发致命错误。
此策略在 CMake 版本 3.27 中引入。它可以由 cmake_policy() 或 cmake_minimum_required() 设置。如果未设置,CMake 会在遇到相对路径时发出警告,并使用 OLD 行为。
注意
策略的 OLD 行为 根据定义已被弃用,并可能在未来的 CMake 版本中被移除。