需要帮助尝试让Cmake找到第三方库

时间:2011-05-30 08:24:32

标签: c++ integration cmake zlib taglib

我目前有一个链接到两个第三方库的项目。这些库必须由它们自己构建,然后链接到项目。一个是taglib,另一个是zlib。我注意到当你在taglib目录中使用Cmake-gui程序时,你需要指定zlib的构建和安装位置。

我的目标是让CMake为我的程序做类似的事情。由于这些库存储的位置不一致,我如何提示用户提供所需库的路径?

我希望这足够具体。

2 个答案:

答案 0 :(得分:21)

对于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 )

您应该对TagLib使用相同的方法,但应该编写自己的FindTagLib.cmake(或搜索一个好的方法)。

这里的重要部分是,您可以为用户提供设置TagLib_DIR变量的选项,您可以使用该变量来搜索TagLib,并使用FindPackageHandleStandardArgs来报告成功或失败。

答案 1 :(得分:1)

不确定交互式提示,但您始终可以使用环境变量或以下内容:

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

为cmake提供自定义zlib或taglib位置。

不要忘记更新FindZLIB.cmake来处理FIND_PATH和FIND_LIBRARY中的这些变量