CMakeFindDependencyMacro

find_dependency

find_dependency() 巨集封裝了針對套件相依性的 find_package() 呼叫。

find_dependency(<dep> [...])

它被設計用於套件設定檔 (<PackageName>Config.cmake)。 find_dependency 轉發了傳遞給原始 find_package() 呼叫的正確參數 QUIETREQUIRED。指定的任何其他引數都會轉發到 find_package()

如果找不到相依性,它會設定一個資訊豐富的診斷訊息,並呼叫 return() 以結束呼叫套件設定檔的處理,並返回到載入它的 find_package() 命令。

注意

return() 的呼叫使得此巨集不適合從 Find Modules 呼叫。

套件相依性搜尋最佳化

如果在同一個目錄中,由於菱形套件相依性,使用與先前呼叫相同的引數呼叫 find_dependency,則會最佳化掉對 find_package() 的底層呼叫。這種最佳化對於支援大型套件相依性圖,同時避免重複搜尋的組合爆炸非常重要。但是,啟發式方法無法解釋會影響套件行為的環境變數,例如某些套件提供的 <PackageName>_USE_STATIC_LIBS。因此,套件設定檔應避免在其呼叫 find_dependency 之前設定此類變數。

在 3.15 版本中變更:先前,如果已找到套件,則始終會最佳化掉對 find_package() 的底層呼叫。 CMake 3.15 移除了最佳化,以支援 find_dependency 呼叫引數要求不同元件的情況。

在 3.26 版本中變更:還原了 3.15 版本之前的最佳化,但採用了上述啟發式方法來考慮不同的 find_dependency 呼叫引數。