ROS中的CMakeLists.txt与package.xml


CMakeLists.txt文件编辑说明

编译功能包

节点的代码已经完成,C++是一种编译语言,在运行之前需要将代码编译成可执行文件,如果使用Python等解析语言编写代码,则不需要进行编译,可以省去此步骤。

ROS中的编译器使用的是CMake,编译规则通过功能包中的CMakeLists.txt文件设置,使用catkin命令创建的功能包中会自动生成该文件,已经配置多数编译选项,并且包含详细的注释,我们几乎不用查看相关的说明手册,稍作修改就可以编译自己的代码。

打开功能包中的CMakeLists.txt文件,找到以下配置项,去掉注释并稍作修改:

include_directories(include  ${catkin_INCLUDE_DIRS})

add_executable(talker  src/talker.cpp)
target_link_libraries(talker  ${catkin_LIBRARIES})
add_dependencies(talker  ${PROJECT_NAME}_generate_messages_cpp)
    
add_executable(listener  src/listener.cpp)
target_link_libraries(listener  ${catkin_LIBRARIES})
add_dependencies(talker  ${PROJECT_NAME}_generate_messages_cpp)

对于这个较为简单的功能包,主要用到了以下四种编译配置项。

(1)include_directories

用于设置头文件的相对路径。全局路径默认是功能包的所在目录,比如功能包的头文件一般会放到功能包根目录下的include文件夹中,所以此处需要添加该文件夹。此外,该配置项还包含ROS catkin编译器默认包含的其他头文件路径,比如ROS默认安装路径、Linux系统路径等。

(2)add_executable

用于设置需要编译的代码和生成的可执行文件。第一个参数为期望生成的可执行文件的名称,后边的参数为参与编译的源码文件(cpp),如果需要多个代码文件,则可在后面依次列出,中间使用空格进行分隔。

(3)target_link_libraries

用于设置链接库。很多功能需要使用系统或者第三方的库函数,通过该选项可以配置执行文件链接的库文件,其第一个参数与add_executable相同,是可执行文件的名称,后面依次列出需要链接的库。此处编译的Publisher和Subscriber没有使用其他库,添加默认链接库即可。

(4)add_dependencies

用于设置依赖。在很多应用中,我们需要定义语言无关的消息类型,消息类型会在编译过程中产生相应语言的代码,如果编译的可执行文件依赖这些动态生成的代码,则需要使用add_dependencies添加${PROJECT_NAME}_generate_messages_cpp配置,即该功能包动态产生的消息代码。该编译规则也可以添加其他需要依赖的功能包。
以上编译内容会帮助系统生成两个可执行文件:talker和listener,放置在工作空间的~/catkin_ws/devel/lib/路径下。

自定义话题消息

打开功能包的CMakeLists.txt文件,在find_package中添加消息生成依赖的功能包message_generation,这样在编译时才能找到所需要的文件:

find_package(catkin  REQUIRED  COMPONENTS
             geometry_msgs
             roscpp
             rospy
             std_msgs
             message_generation)

catkin依赖也需要进行以下设置:

catkin_package(……
               CATKIN_DEPENDS  geometry_msgs  roscpp  rospy  std_msgs  message_runtime
               ……)

最后设置需要编译的msg文件:

add_message_files(
    FILES
    Person.msg)
generate_messages(
	DEPENDENCIES
    std_msgs)

相关热门文章

ROS中的CMakelists_buzaishihaizi的博客-CSDN博客

ROS中的CMakeLists.txt详解_听涯的博客-CSDN博客

package.xml文件编辑说明

参考热门文章

ROS中的package.xml的使用_Alex的博客-CSDN博客

package.xml · 中国大学MOOC———《机器人操作系统入门》讲义 (gitbooks.io)


文章作者: CaoDong street
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 CaoDong street !
  目录