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 行為。

注意

政策的 OLD 行為根據定義為 已棄用,並且可能會在未來版本的 CMake 中移除。