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 行為 deprecated by definition,並且可能會在未來版本的 CMake 中移除。