2011-05-30 45 views
10

我目前有一個鏈接到兩個第三方庫的項目。這些庫必須自行構建,然後與項目鏈接。一個是taglib,另一個是zlib。我注意到,當您在taglib目錄上使用Cmake-gui程序時,您需要指定zlib的構建和安裝位置。需要幫助,試圖讓Cmake找到第三方庫

我的目標是讓CMake爲我的程序做類似的事情。由於這些庫的存儲位置不一致,我如何提示用戶提供所需庫的路徑?

我希望這是足夠具體。

回答

19

在ZLib的情況下,CMake提供了FindZLIB.cmake,您可以「簡單地」在您的cmakelists中放置一個find_package調用。如果需要,您可以對findzlib.cmake進行一些修改以滿足您的需求。例如。在搜索庫時添加ZLIB_DIR作爲附加提示。這個ZLIB_DIR可以由用戶設置。

假設您的庫/可執行文件被稱爲YourProject,您可以按如下方式使用它。

find_package(ZLIB REQUIRED) 
if (ZLIB_FOUND) 
    include_directories(${ZLIB_INCLUDE_DIRS}) 
    target_link_libraries(YourProject ${ZLIB_LIBRARIES}) 
endif(ZLIB_FOUND) 

您應該使用標籤庫相同的方法,而是要自己編寫FindTagLib.cmake(或搜索一個很好的)。

這裏的重要部分是,您可以讓用戶選擇設置TagLib_DIR變量,該變量用於搜索TagLib,並且您使用FindPackageHandleStandardArgs報告成功或失敗。

+0

這個變量所以我要做的就是把這個FindTaglib.cmake在同一目錄下的CMakeLists.txt? – 2011-05-30 19:23:23

+0

它在CMAKE_MODULE_PATH中搜索FindTagLib.cmake。我不確定主目錄是否已經在CMakeLists.txt中。如果不是,您可以添加它:set(CMAKE_MODULE_PATH $ {CMAKE_CURRENT_SOURCE_DIR}) – 2011-05-30 20:03:28

1

不知道有關交互式提示,但你總是可以使用環境變量或以下:

cmake -D<VAR_NAME>:STRING=<path to custom zlib> . 

提供自定義的zlib或標籤庫的位置cmake的。

不要忘了更新FindZLIB.cmake來處理FIND_PATH和FIND_LIBRARY