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 版本中移除。