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

Posted

技术标签:

【中文标题】使用 FindLibrary.cmake 将非标准库添加到 cmake【英文标题】:adding non standard library to cmake using FindLibrary.cmake 【发布时间】:2013-07-18 19:14:36 【问题描述】:

我想在我的代码中使用树解析库 (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】:

对于这么小的(相当标准的)查找过程,我只需将代码直接添加到主 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

【讨论】:

以上是关于使用 FindLibrary.cmake 将非标准库添加到 cmake的主要内容,如果未能解决你的问题,请参考以下文章

将非标准字符串转换/修改为 Python DataFrame 的日期时间

将非规范化文件中的数据加载到规范化表中

我可以将非特权应用程序绑定到 Mac OS X 上的特权端口吗?

如何使用 bigrquery 库将非重复记录插入 BigQuery?

如何将非字符串数据传递给 Flutter 中的命名路由?

如何使用 JavaScript 将非英文字符转换为英文