使用FindLibrary.cmake将非标准库添加到cmake

时间:2013-07-18 19:14:37

标签: c++ cmake shared-libraries

我想在我的代码中使用树解析库(NHParser)。我已经在/ home / ikram / parser中安装了库(包含/ home / ikram / parser / include / NHparser /中的包含文件和/ home / ikram / parser / lib /目录中的lib文件)。 我想知道,首先,我是否可以在我的主CMakeLists.txt文件中添加库并包含文件,而无需使用FindNHPARSER.cmake脚本?如果是的话,我怎么做到这一点?

我尝试了上述但未能成功,所以我写了FindNHPARSER.cmake,如下所示。

find_path(NHPARSER_INCLUDE_DIR include/NHparser/NHparser.h
                    HINTS PATH_SUFFIXES NHparser)
find_library(NHPARSER_LIBRARY NAMES NHparser)

set(NHparser_LIBRARIES ${NHparser_LIBRARY})
set(NHparser_INCLUDE_DIRS ${NHparser_INCLUDE_DIR})
include(FindPackageHandleStandardArgs)
mark_as_advanced(NHparser_INCLUDE_DIR NHparser_LIBRARY )

写得正确吗?我如何在我的主CMakeLists.txt脚本中包含它,我是否需要在运行cmake时设置CMAKE_MODULE_PATH?

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

对于这么小的(相当标准的)查找过程,我只是将代码直接添加到主CMakeLists.txt。

如果您愿意, 可以将其移至单独的.cmake文件中 - 然后您只需在主CMakeLists.txt中的适当位置include该文件。

至于代码,我会保持简单;基本上只是find_pathfind_library调用以及检查实际找到的相关内容:

find_path(NHPARSER_INCLUDE_DIR NAMES NHparser.h PATH_SUFFIXES NHparser)
if(NOT NHPARSER_INCLUDE_DIR)
  message(FATAL_ERROR "Didn't find NHparser.h")
endif()

find_library(NHPARSER_LIBRARY NAMES NHparser)
if(NOT NHPARSER_LIBRARY)
  message(FATAL_ERROR "Didn't find NHparser library")
endif()

您可以使用以下变量:

include_directories(${NHPARSER_INCLUDE_DIR})
...
target_link_libraries(MyExe ${NHPARSER_LIBRARY})

这些变量不太可能无法找到,因为你机器上这个库的安装前缀似乎是“/ home / ikram / parser”。由于此位置可能特定于您自己的计算机,因此我不会将其硬编码到您的CMakeLists.txt中。

相反,要让CMake将该路径添加到默认搜索路径列表中,只需在调用CMake时设置CMAKE_PREFIX_PATH

cmake . -DCMAKE_PREFIX_PATH=/home/ikram/parser