记录两个ROS工程编译时候的问题

1.contains a package but "catkin_make" must be invoked in the root of workspace

contains a package but "catkin_make" must be invoked in the root of workspace错误提示的字面意思是当前包含了一个package,但是catking_make命令必须在工作空间的顶级目录下执行。

先说下我是怎么出现这个问题的吧。我在创建了一个catkin_ws目录之后,在这个目录里边直接使用命令catkin_create_pkg命令创建了个maker子目录,然后进入marker里边添加了CMakeLists.txt并进行编辑,同时在marker下还创建了src子目录,并在src下写了test_marker.cpp文件。然后在marker这一级目录下进行编译的,编译报了上面的错误。

当仔细看了日志提醒后,我觉得我把workspace和package这两个ROS当中很重要的概念混了。而且这里日志提醒必须在workspace的root下编译,这样catkin_make命令才会有用。

一个workspace下面可以有多个package,但是workspace有自己组织package的方式。每一个package都是workspace当中的代码包,应该存放在src下面。那么,组织结构如下所示:

|---workspace
|   |---src
|      |---package_1
|         |---CMakeLists.txt
|         |---src 
|             |---xxx.cpp
       |---package_2
...
|
|      |---package_n

这样组织工程后,在workspace下直接使用catkin_make命令编译就ok了。

编译完成后,会创建中间文件build和devel,生成的可执行文件就在devel下面。此时工程目录大致如下:

|---workspace
|   |---build
|   |---devel
|   |---src
|      |---package_1
|         |---CMakeLists.txt
|         |---src 
|             |---xxx.cpp
       |---package_2
...
|
|      |---package_n

 

2.fatal error: ros/ros.h: No such file or directory

fatal error: ros/ros.h: No such file or directory错误提示我们没有该文件或者目录,那意思就是说我们没有引用对应的文件或者目录。

问题原因:在CMakeLists.txt当中没有把下面这一项打开

include_directories(
 include
 ${catkin_INCLUDE_DIRS}
)

这里的include_directories是可以指定包含目录的选项。设定为${catkin_INCLUDE_DIRS},这意味着将引用每个功能包中的include目录中的头文件。当用户想指定一个额外的include目录时,写在${catkin_INCLUDE_DIRS}的下一行即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值