2017-08-08 110 views
1

我創建一個庫(稱爲fmi2),我打算安裝在我的本地機器上(通過包管理器),然後鏈接到一堆其他庫。在哪裏安裝FindLib.cmake

我將提供一個Findfmi2.cmake文件,以便我可以從我的其他庫中調用find_package(fmi2),但應該在何處安裝該文件?

這裏有一些選擇,我認爲和他們的問題:

  • /usr/share/cmake-3.8/Modules/Findfmi2.cmake
    • 優勢:find_package(fmi2)將只是工作
    • 缺點:只適用於cmake的一個版本
  • /usr/share/cmake/Modules/Findfmi2.cmake
    • 優點:適用於任何版本的cmake
    • 缺點:這不是默認文件夾。我們需要添加set(CMAKE_MODULES_PATH /usr/share/cmake/Modules),這會殺死任何可移植性。
  • ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Findfmi2.cmake
    • 優勢:便於攜帶,只需要添加set(CMAKE_MODULES_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
    • 缺點:不是系統範圍內。需要手動將此文件添加到每個使用它的庫。這複製了我的框架中的文件。
+1

前段時間我有一個[類似的問題](https://stackoverflow.com/questions/44920389/installing-a-cmake-library-also-ship-find-modules-for-the-dependencies),會對聽到你的問題的答案非常感興趣! – oLen

回答

1

您正在爲CMake創作內容。你不需要一個FindModule。這旨在查找外部非CMake輸出。

This Stackoverflow post from ruslo應該可以幫助您瞭解find_package()模塊模式和配置模式之間的區別。它還回答了有關FindModules路徑的問題,即它們被複制到您的CMake項目中,而不是系統範圍內發現的,除非它們是「Modules」目錄中與CMake捆綁在一起的官方FindModules的一部分。

現代CMake的文檔現在終於含有很好的例子創建一個配置模式包:如果你想明確的充分例子cmake-packages

,雖然使用年齡稍大的語法爲config.cmake文件,ruslo有更多關於Github