2011-05-30 55 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