如何在 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 &lt;aruco/aruco.h&gt;。如果您不想指定子目录,请将其添加到 include_directories 中使用的路径中。 谢谢!既然你在评论中回答了,我有什么办法可以投票或增加你的代表或其他什么? 就个人而言,我建议您不要将子目录添加到路径中,并在执行包含时指定子目录。我喜欢它提供的关于与标头关联的源的上下文(如果标头命名相同,也有助于避免问题)。 【参考方案1】:

正如 James Adkison 所说,我需要正确引用头文件。查看其他 opencv 包含文件,我以 #include &lt;opencv2/[blah]&gt; 开头,这解释了为什么它们也能正常工作。

【讨论】:

你去,这行得通。回答你自己的问题并接受它。 :) 如果我想获得代表,我会提供答案。

以上是关于如何在 CMakeLists 中包含库头文件的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 扩展程序 |如何在 CDN 的内容和后台脚本中包含库

在 cmake c++ 项目中包含库的首选方法是啥?

在 Simulink 的自定义代码部分中包含库

在 Rails 控制器中包含库时,Paypal SDK Ruby 错误

如何在 Qt Creator 的 CMakeLists.txt 中包含头文件?

Android 安装包优化使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库头文件到 Android 工程中 | 配置 CMakeLists.txt 构建脚本 )(代码