CMakeFindDependencyMacro¶
- find_dependency¶
find_dependency()
巨集包裝了find_package()
呼叫,用於尋找套件相依性find_dependency(<dep> [...])
它被設計用於 套件組態檔 (
<PackageName>Config.cmake
)。find_dependency
轉發了正確的參數,用於QUIET
和REQUIRED
,這些參數被傳遞到原始的find_package()
呼叫。任何額外指定的參數都會轉發到find_package()
。如果找不到相依性,它會設定資訊豐富的診斷訊息並呼叫
return()
以結束呼叫套件組態檔的處理,並返回到載入它的find_package()
命令。
套件相依性搜尋最佳化¶
如果 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
呼叫參數。