我目前有一个链接到两个第三方库的项目。这些库必须自行构建,然后与项目链接。一个是taglib,另一个是zlib。我注意到,当您在taglib目录上使用Cmake-gui程序时,您需要指定zlib的构建和安装位置。需要帮助,试图让Cmake找到第三方库
我的目标是让CMake为我的程序做类似的事情。由于这些库的存储位置不一致,我如何提示用户提供所需库的路径?
我希望这是足够具体。
我目前有一个链接到两个第三方库的项目。这些库必须自行构建,然后与项目链接。一个是taglib,另一个是zlib。我注意到,当您在taglib目录上使用Cmake-gui程序时,您需要指定zlib的构建和安装位置。需要帮助,试图让Cmake找到第三方库
我的目标是让CMake为我的程序做类似的事情。由于这些库的存储位置不一致,我如何提示用户提供所需库的路径?
我希望这是足够具体。
在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报告成功或失败。
不知道有关交互式提示,但你总是可以使用环境变量或以下:
cmake -D<VAR_NAME>:STRING=<path to custom zlib> .
提供自定义的zlib或标签库的位置cmake的。
不要忘了更新FindZLIB.cmake来处理FIND_PATH和FIND_LIBRARY
这个变量所以我要做的就是把这个FindTaglib.cmake在同一目录下的CMakeLists.txt? – 2011-05-30 19:23:23
它在CMAKE_MODULE_PATH中搜索FindTagLib.cmake。我不确定主目录是否已经在CMakeLists.txt中。如果不是,您可以添加它:set(CMAKE_MODULE_PATH $ {CMAKE_CURRENT_SOURCE_DIR}) – 2011-05-30 20:03:28