如何在 CMakeLists 中包含库 headers
How to include library headers in CMakeLists
我无法让 CMake 和 Make 找到编译代码所需的外部 header 文件。
我的代码尝试使用外部 aruco 库提供的 header
#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 header 都在 /usr/local/include/opencv2
但 OpenCV_INCLUDE_DIRS
只声明 /usr/local/include
而所有 opencv header 都可以毫无问题地找到。
正如 James Adkison 所说,我需要正确引用头文件。查看其他 opencv 包含文件,我将它们全部从 #include <opencv2/[blah]>
开始,这解释了为什么它们也有效。
我无法让 CMake 和 Make 找到编译代码所需的外部 header 文件。
我的代码尝试使用外部 aruco 库提供的 header
#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 header 都在 /usr/local/include/opencv2
但 OpenCV_INCLUDE_DIRS
只声明 /usr/local/include
而所有 opencv header 都可以毫无问题地找到。
正如 James Adkison 所说,我需要正确引用头文件。查看其他 opencv 包含文件,我将它们全部从 #include <opencv2/[blah]>
开始,这解释了为什么它们也有效。