用于创建此对象的程序是package_【ROS 学习笔记】CMakeLists.txt 与 package.xml

0. 前言

在 ROS 中,节点的编写语言通常只有 C++ 和 Python,C++ 需要编译后才能运行,Python 则无需编译。

我们知道 Linux 平台编译 C++ 文件,需要编译器和链接器,其中编译器是将源代码编译成目标代码,链接器是将目标代码链接到可执行文件。若是编译单个文件,用 g++ 即可;若是编译一个 C++ 工程,则需要批处理编译工具,如 make,通过设定规则文件 makefile 调用 g++ 等编译工具进行批量编译。但 makefile 的编写十分复杂,便诞生了 CMake,通过编写简单的 CMakeLists.txt 规则文件,就能自动生成 makefile 文件,并且 CMake 是跨平台的,十分强大。可参考之前的博客:

Linux 编译工具 gcc/g++、Make/Makefile、CMake/CMakeLists.txt、qmake​www.cnblogs.com
c9f1892d228a8ae767124caff1b922e5.png

ROS 的编译器便是 CMake,为了更加人性化,ROS 在 CMake 基础上封装了 catkin 命令,用 cmake 命令创建功能包时,会自动生成 CMakeList.txt 文件,已配置了多数编译选项,且包含详细的注释,只需稍作修改便可编译自己的文件。

而 package.xml 文件是描述功能包清单的文件,包括功能包的名称、版本号、作者信息、许可信息、编译依赖和运行依赖等。

我们在用 catkin_create_pkg 命令创建功能包时,是会自动生成 CMakeLists.txt 和 package.xml 文件的。

举例:

# 创建工作空间
mkdir -p ~/catkin_ws/src

eb6ea35ed9203e4209757b40590a3c56.png

7109fa02acac47c13b02c8f7123357c4.png

下面看下 CMakeLists.txt 文件和 package.xml 文件各有哪些内容,需要自己改动哪些地方。

1. CMakeLists.txt 文件

常用的编译配置项如下:

(1)include_directories

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

(2)add_exectuable

  • 用于设置需要编译的代码和可执行文件
  • 第一个参数为期望生成的可执行文件(节点)名称
  • 后面的参数为参与编译的源文件(.cpp),若需要多个代码文件,可依次列出,空格分隔

(3)target_link_libraries

  • 用于设置链接库
  • 有些功能需要使用系统或第三方库函数,通过该选项可以配置执行文件链接的库文件
  • 第一个参数与 add_exectuable 相同,为可执行文件(节点)名称
  • 后面的参数为需要链接的库,依次列出,空格分隔

(4)add_dependencies

  • 用于设置依赖
  • 有时候需要自定义消息类型,消息类型会在编译过程中产生相应语言的代码。若编译的可执行文件依赖这些动态生成的代码,则需要添加 ${PROJECT_NAME}_generate_messages_cpp 配置

(5)自定义数据类型:消息 msg、服务 srv、动作 action

  • find_package(catkin REQUIRE COMPONENTS message_generation)
  • catkin_package(CATKIN_DEPENDS message_runtime)
  • add_message_files(FILES xxx.msg)
  • add_service_files(FILES xxx.srv)
  • add_action_files(FILES xxx.action)
  • generate_messages(DEPENDENCIES std_msgs)

模板:

cmake_minimum_required

2. package.xml 文件

  • <build_depend></build_depend> 标签定义了功能包中代码编译时所依赖的其他功能包
  • <exec_depend></exec_depend> 标签定义了功能包中可执行程序运行时所依赖的其他功能包
  • 自定义数据类型:话题消息 msg、服务数据 srv,需添加
<build_depend>message_generation

模板:

<?xml version="1.0"?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值