本文主要是介绍利用msg生成头文件时,ROS编译报错:XXX/XXX.h: No such file or directory,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题:ROS中利用msg文件自动生成头文件未成功,编译报错
我是想让头文件生成在/devel/include里面(可以根据自己的需求改,但是CMakeList.txt和package.xml里面的配置一定要对应)
一、CMakeLists.txt关键配置
1.指定消息文件文件名与自己的文件对应
# 指定消息文件
add_message_files(FILESgps_data.msg
)
2、配置头文件路径
# 包含生成的头文件路径
include_directories(#include #ROS包下include文件夹路径${catkin_INCLUDE_DIRS} #包含std_msg.h等头文件目录${CATKIN_DEVEL_PREFIX}/include # 包含 devel/include 目录
)
(1)第一条指令include,是指包下的include文件夹,一般用于存放,自己编写的头文件,因为我没有自己写的头文件,所以这里我第一条指令注释了
(2)第二条指令是把std_msg.h等头文件路径包含进去
(3)第三条指令,利用msg自动生成的头文件是存放在/devel/include下,所以将其路径包含进去。
3、声明包的依赖关系
catkin_package(CATKIN_DEPENDS message_runtime std_msgs#INCLUDE_DIRS include ${CATKIN_DEVEL_PREFIX}/include # 确保包含路径INCLUDE_DIRS ${CATKIN_DEVEL_PREFIX}/include
)
这个指令里面的路径需要和上面对应,因为上面我包含的路径是/devel/include,所以我的路径设置的是第三条指令,如果你上面包含的是ROS包下的include文件夹和/devel/include文件夹,那就用第二条指令,为啥不需要包含 ${catkin_INCLUDE_DIRS} 这个的路径呢?我不知道,据说这个路径省略不写。
二、package.xml配置
package.xml文件中需要包含对message_generation和message_runtime的依赖
<build_depend>message_generation</build_depend>
<exec_depend>message_generation</exec_depend>
<exec_depend>message_runtime</exec_depend>
三、进入工作空间,重现编译(默认roscore了)
cd ~/workspace_name #进入工作空间
source devel/setup.bash #配置环境
catkin_make #全部重新编译
catkin_make --pkg package_name #只编译package_name包
这篇关于利用msg生成头文件时,ROS编译报错:XXX/XXX.h: No such file or directory的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!