1. 需求
- 要写的ROS代码比较多,有很多公共功能。
- 希望把公共部分单独作为一个pkg,供同一工作区中的其他pkgs引用。
- 参考:ROS:使用同一工作空间下不同包的头文件
2. 实现
- 本质上就是实现两个pkg(记为A与B),假设B引用A。
- 如果只引用A中的头文件(而不是.so lib),那A的实现与普通pkg实现没有太大不同,需要注意的是,在
CMakeLists.txt
中需要
catkin_package(
# 这一行必须有
# 如果不是别的pkg要调用,下面这行没有也没事,原因不太清楚
INCLUDE_DIRS include
)
- 如果需要引用A生成的lib文件,就需要
add_library(
${PROJECT_NAME}
src/test.cc
)
- B的改动主要在于配置部分
package.xml
中需要添加build_depend/exec_depend/build_export_depend
三个标签,value都是A包的名字CMakeLists.txt
中需要在find_package(catkin REQUIRED COMPONENTS A)
中添加A包
<build_depend>A</build_depend>
<build_export_depend>A</build_export_depend>
<exec_depend>A</exec_depend>
find_package(catkin REQUIRED COMPONENTS
roscpp
sensor_msgs
A # 自定义模块
)
-
B包在执行完上述配置后
- 可直接引用 A 包中 include 目录下的头文件。
- 要引用A包中的lib,可直接通过
target_link_libraries(test A)
来进行。
-
另一种实现:参考这里