CMakeFindDependencyMacro¶
- find_dependency¶
find_dependency()
巨集封裝了針對套件相依性的find_package()
呼叫。find_dependency(<dep> [...])
它被設計用於套件設定檔 (
<PackageName>Config.cmake
)。find_dependency
轉發了傳遞給原始find_package()
呼叫的正確參數QUIET
和REQUIRED
。指定的任何其他引數都會轉發到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
呼叫引數。