2017-08-05 101 views
0

CMake的find_package文件說:通過提供變量和進口由封裝本身記載目標在CMake中,如何在調用find_package後找到導入的目標?

當包發現包特有的信息。

如果我有一個圖書館,ABCD我可以開始使用find_package,提供的CMake可以找到一個合適的ABCDConfig.cmake文件。然後它創建如上所述的導入目標(例如abcd10 abcdExtra)。

然後,我可以編譯和對這些庫的鏈接,像這樣:

target_include_directories(mytarget abcd10 abcdExtra) 
target_link_libraries(mytarget abcd10 abcdExtra) 

的問題是,這取決於怎麼說ABCDConfig.cmake文件,別人寫的內容,該目標的名稱可能是幾乎任何東西(例如abcdlib,abcdX64,Foobar,...),即使它可能是完全相同的庫ABCD

我已閱讀了大部分文檔,但看不到任何獲取導入目標的方法,因此看起來我必須知道所有常用導入目標名稱是什麼,並單獨檢查它們。這對我來說似乎有點不合理。我在這裏錯過了什麼嗎?如何在不知道這些細節的情況下,加載並鏈接由不同軟件包管理器(甚至是自己編寫文件的人)生成的庫?

回答

2

如何在不知道這些細節的情況下加載並鏈接由不同包管理器(甚至是自己編寫ABCDConfig.cmake文件的人)生成的庫?

你不行。

唯一的辦法就是閱讀文檔關於具體的ABCDConfig.cmake文件。這些文件通常寫在文件的開頭(作爲註釋)。

CMake沒有強制執行任何關於ABCDConfig.cmake文件,所以只有文件的作者知道如何使用它。

雖然CMake爲生成配置文件提供了一些支持(請參閱install(EXPORTS)命令),但只有項目作者知道導入目標的含義。

相關問題