使用FindLibrary.cmake向cmake添加非标准库
adding non standard library to cmake using FindLibrary.cmake
我想在代码中使用一个树解析库(NHParser)。我已经在/home/ikram/parser中安装了库(include文件在/home/ikram/passer/include/NHparser/中,lib文件在/hom/ikram/parser/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?
谢谢你抽出时间。
对于这样一个小的(相当标准的)查找过程,我只需要将代码直接添加到主CMakeLists.txt.
如果您愿意,可以将其移动到一个单独的.cmake文件中,然后只需在主CMakeLists.txt.中的适当位置include
该文件
至于代码,我会保持非常简单;本质上只是一个find_path
和find_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
相关文章:
- C4204:使用的非标准扩展:非常量聚合初始值设定项
- 在双重继承的情况下如何处理非标准构造函数
- CMake 不编译具有非标准扩展名的文件
- 定义具有非标准签名的自定义映射比较器
- 我想获取点的属性,它报告错误 C3867:"point::output_x":非标准语法;使用"&"创建指向成员的指针
- 非标准语法,使用 & 创建指向成员的指针
- 在Qt中链接具有非标准名称的lib文件
- 非标准语法使用 '&' 创建指向成员 C++ 的指针
- WINAPI EnumWindowsProc:非标准语法;使用 & 创建指向成员的点
- Vulkan-hpp 是reinterpret_casting非标准布局类到另一个类.这合法吗?
- 'cv::Mat::type':非标准语法;使用 '&' 创建指向成员的指针
- registerPointPickingCallback (PCLViewer::callback_Test,(void*)&viewer);返回 C3687 非标准语法;使用"&"创建指向成员的指针
- 错误 C4839:非标准地使用类 'ATL::CW2AEX<520>' 作为可变参数函数的参数
- C++ Visual Studio 2015:非标准语法;使用 '&' 创建指向成员的指针
- 非标准语法;使用 & 创建指向成员的指针
- 如何将 Boost 库与 CMake 链接(如果 boost 位于非标准位置,则在集群上)?
- Cmake在非标准路径中找到OpenSSL库
- 使用CMake时出现非标准扩展链接错误
- CMake 和非标准扩展
- 使用FindLibrary.cmake向cmake添加非标准库