如何在CMakeLists中包含库头文件

时间:2015-10-21 03:39:15

标签: c++ cmake makefile ros catkin

我无法获取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。是不是不搜索子目录?大多数opencv标头都在/usr/local/include/opencv2中,但OpenCV_INCLUDE_DIRS只声明/usr/local/include,但所有opencv标题都没有任何问题。

1 个答案:

答案 0 :(得分:1)

正如James Adkison所说,我需要正确引用头文件。查看其他opencv包含文件,我使用#include <opencv2/[blah]>启动它们,这解释了为什么这些文件也能正常工作。