If you have a cpp file under package/src like this:
where you include the library “ros/ros.h”, then you have to add dependency for roscpp.
- CMakeLists.txt:
首先,用文本编辑器gedit打开功能包目录下的CMakeLists.txt文件,在find_package(catkin REQUIRED …)字段中添加roscpp,添加后的字段如下:
同时,找到include_directories(…)字段,去掉${catkin_INCLUDE_DIRS}前面的注释,如下:
声明可执行文件:
就接下来,我们需要在CMakeLists.txt中添加两句,我的习惯在文件最后一行添加就好了,来声明我们需要创建的可执行文件。
add_executable(my_hello_world_node src/my_hello_world_node.cpp)
target_link_libraries(my_hello_world_node ${catkin_LIBRARIES})
第一行声明了我们想要的可执行文件的文件名,以及生成此可执行文件所需的源文件列表。如果你有多个源文件,把它们列在此处,并用空格将其区分开。
第二行告诉 Cmake 当链接此可执行文件时需要链接哪些库(在上面的 find_package 中定义)。如果你的包中包括多个可执行文件,为每一个可执行文件复制和修改上述两行代码。
- Package.xml
然后,用文本编辑器gedit打开功能包目录下的package.xml文件,找到这样一句话<buildtool_depend>catkin</buildtool_depend>,在这句话的下面添加如下内容:
<build_depend>roscpp</build_depend>
<build_export_depend>roscpp</build_export_depend>
<exec_depend>roscpp</exec_depend>
- 功能包的编译
功能包的编译配置好后,就可以开始编译了,这里有两种编译方式,一种是编译工作空间内的所有功能包,另一种是编译工作空间内的指定功能包,两种编译方式各有用处,下面分别讲解。
第一种,编译工作空间内的所有功能包:
cd ~/catkin_ws/
catkin_make
第二种,编译工作空间内的指定功能包:
其实就是加入参数 -DCATKIN_WHITELIST_PACKAGES=””,在双引号中填入需要编译的功能包名字,用空格分割。
cd ~/catkin_ws/
catkin_make -DCATKIN_WHITELIST_PACKAGES="hello_world"
- 功能包的启动运行
roscore
cd ~/catkin_ws/
source devel/setup.bash
rosrun hello_world my_hello_world_node