2017-08-13 86 views
0

我有this項目,我已經完成了用於Qt和共享庫的實驗。這基本上是Qt教程中的一些Qt Widget,我認爲是正確的CMakeLists配置,因此MylibConfig.cmake是從MylibConfig.cmake.in自動生成的以共享該庫。問題是我不希望最終用戶將我的庫的依賴關係添加到它自己的CMakeLists.txt。在我的情況下,這個庫取決於Qt4,但我希望最終用戶不必做find_package(Qt 4 REQUIRED)。想象一下,我想爲不需要或不想知道我的庫建立在什麼上的人提供封閉的功能。有沒有辦法自動生成MylibConfig.cmake,它會自動找到所有必需的軟件包,或者是在MylibConfig.cmake.in中手動添加鰭軟件包的唯一選擇?Config.cmake文件用於定製共享庫

非常感謝。

+0

當然有。你有什麼嘗試?你有沒有看過其他項目? – usr1234567

+0

我已經看過[PCL](https://github.com/PointCloudLibrary/pcl)以及[OpenCV](https://github.com/opencv/opencv),但還沒有理解他們是如何做到的。 – apalomer

+0

@apalomer,我會說這個問題的主題很混亂......「定製」聽起來像庫是用CMake製作的。我相信,更好的名字可能會喜歡「如何將傳遞依賴項/包包含到'* Config.cmake'模塊中......」或類似的:) – zaufi

回答

1

實際上,這兩個提到的項目都可以從*Config.cmake文件中找到相關性。而現在這是唯一的選擇 - CMake不能幫你「自動」做。

所以,不管怎樣,你的配置模塊都應該這樣做。 簡單的方法是添加find_dependency()調用(因爲您確切知道其他包,您的項目是基於)。有點難的是「自動」(編寫自己的幫助函數) - 例如通過檢查目標的屬性,「搜索」所有庫的來源,並最終生成調用find_dependency()

+0

非常感謝。我使用的是cmake 2.8,所以我想我不能使用['find_dependency()'](https://cmake.org/cmake/help/latest/module/CMakeFindDependencyMacro.html),因爲我相信它是在cmake 3.0中引入的 – apalomer

+0

@apalomer,正如文檔所說,它只是一個「native」find_package'的包裝器,用於將「外部」查找器模塊中的一些命名參數傳遞給依賴的一個(「內部」)...您可以使用'find_package' ...並傳遞(或不傳遞)你模塊的命名參數。 – zaufi

+0

...這是一個好主意,儘可能使用最新的CMake :) – zaufi