如何在 CMakeLists 中包含库头文件
Posted
技术标签:
【中文标题】如何在 CMakeLists 中包含库头文件【英文标题】:How to include library headers in CMakeLists 【发布时间】:2015-10-21 03:39:15 【问题描述】:我无法让 CMake 和 Make 找到编译代码所需的外部头文件。
我的代码尝试使用外部 aruco 库提供的标头
#include <aruco.h>
当我尝试编译时,我得到了
/home/ncr/ncr_ws/src/aruco_ros/src/aruco_ros_node.cpp:21:19: fatal error: aruco.h: No such file or directory
#include <aruco.h>
^
compilation terminated.
我的 CMakeLists.txt 有:
cmake_minimum_required(VERSION 2.8.3)
project(aruco_ros)
set(CMAKE_MODULE_PATH /usr/local/lib/cmake)
message( STATUS "CMAKE_MODULE_PATH: " $CMAKE_MODULE_PATH)
find_package(OpenCV REQUIRED)
find_package(aruco REQUIRED)
...
include_directories(
$OpenCV_INCLUDE_DIRS
$aruco_INCLUDE_DIRS
)
message(STATUS "OpenCV_INCLUDE_DIRS: " $OpenCV_INCLUDE_DIRS)
message(STATUS "aruco_INCLUDE_DIRS: " $aruco_INCLUDE_DIRS)
Findaruco.cmake
文件位于 /usr/local/lib/cmake/Findaruco.cmake
Findaruco.cmake
文件将aruco_INCLUDE_DIRS
变量设置为/usr/local/include
,并且包含文件aruco.h
在/usr/local/include/aruco
中。 make 不搜索子目录吗?大多数opencv标头都在/usr/local/include/opencv2
中,但OpenCV_INCLUDE_DIRS
仅声明/usr/local/include
,但所有opencv标头都没有任何问题。
【问题讨论】:
你需要#include <aruco/aruco.h>
。如果您不想指定子目录,请将其添加到 include_directories
中使用的路径中。
谢谢!既然你在评论中回答了,我有什么办法可以投票或增加你的代表或其他什么?
就个人而言,我建议您不要将子目录添加到路径中,并在执行包含时指定子目录。我喜欢它提供的关于与标头关联的源的上下文(如果标头命名相同,也有助于避免问题)。
【参考方案1】:
正如 James Adkison 所说,我需要正确引用头文件。查看其他 opencv 包含文件,我以 #include <opencv2/[blah]>
开头,这解释了为什么它们也能正常工作。
【讨论】:
你去,这行得通。回答你自己的问题并接受它。 :) 如果我想获得代表,我会提供答案。以上是关于如何在 CMakeLists 中包含库头文件的主要内容,如果未能解决你的问题,请参考以下文章
Chrome 扩展程序 |如何在 CDN 的内容和后台脚本中包含库
在 Rails 控制器中包含库时,Paypal SDK Ruby 错误
如何在 Qt Creator 的 CMakeLists.txt 中包含头文件?
Android 安装包优化使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库头文件到 Android 工程中 | 配置 CMakeLists.txt 构建脚本 )(代码