CMakeFindDependencyMacro

find_dependency

find_dependency() 巨集包裝了 find_package() 呼叫,用於尋找套件相依性

find_dependency(<dep> [...])

它被設計用於 套件組態檔 (<PackageName>Config.cmake)。find_dependency 轉發了正確的參數,用於 QUIETREQUIRED,這些參數被傳遞到原始的 find_package() 呼叫。任何額外指定的參數都會轉發到 find_package()

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

注意

呼叫 return() 使得此巨集不適合從 尋找模組 中呼叫。

套件相依性搜尋最佳化

如果 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 呼叫參數。