ROS下的CMakeList.txt编写

本文详细介绍了在ROS环境中如何编写和配置CMakeList.txt文件,包括设置源码、库依赖、消息类型等关键步骤,帮助开发者理解并掌握ROS项目的构建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ROS下的CMakeList.txt编写

一、 概述

CMake构建系统通过ROS包中的CMakeList.txt来构建软件包。互相依赖的包都包含一个或者多个CMakeList.txt来描述如何编译代码和如何安装。在catkin 项目中,CMakeList.txt 符合标准的vanilla CMakeList.txt 格式,但稍微有点不同。

二、 整体结构和命令一览

在编写CMakeLists.txt时必须遵循特定的格式,否则软件包将无法正确构建和编译。一个完整的ROS下CMakeList.txt由下面内容组成

  1. 所需CMake版本(cmake_minimum_required)
  2. 软件包名称(project())
  3. 查找构建所需的其他CMake / Catkin软件包(find_package())
  4. 启用Python模块支持(catkin_python_setup())
  5. 消息/服务/动作生成器(add_message_files(),add_service_files(),add_action_files())
  6. 生成消息/服务/动作等自定义消息(generate_messages())
  7. 指定包的构建信息输出(catkin_package())
  8. 要建立的库/可执行文件(add_library()/ add_executable()/ target_link_libraries())
  9. 测试(catkin_add_gtest())
  10. 安装规则(install())

三、 CMake版本

CMakeLists.txt文件必须以CMake的版本开头。下面表示的是Catkin需要2.8.3或更高的版本。

cmake_minimum_required(VERSION 2.8.3)

四、 软件包名称

继而需要指定CMake工程名,一般取作包名。例如我们的项目名叫做robot_brain

project(robot_brain)

而在CMake中,可以在CMake文本中使用变量${PROJECT_NAME}来引用项目名称。

五、 查找相关的CMake包

接下来我们要用find_package指令来指定在构建项目过程中依赖了哪些其他的包,在ROS中,catkin必备依赖,所以雷打不打地我们写上catkin REQUIRED

find_package(catkin REQUIRED)

在此基础上,如果我们还需要依赖其他包(或者组件),我们就在 上述的包后面继续添加包(组件)名即可:

find_package(catkin REQUIRED COMPONENTS nodelet)

或者可以写成

find_package(catkin REQUIRED)
find_package(nodelet REQUIRED)

值得注意一点的是:这里添加的包用于构建包使用,而不是添加运行时依赖项。

你也可以做:

find_package(catkin REQUIRED)
find_package(nodelet REQUIRED)

如何写,看个人习惯吧,如果不考虑篇幅,其实我更喜欢把所有包(组件)列成一列,直观。在普通的CMakeLists.txt中是没有find_package()的,那么,catkin中的这个语句有啥作用呢?

5.1 那find_package()作何用?

如果CMake通过find_package找到一个包,则会自动生成有关包所在路径的CMake环境变量,环境变量描述了包中头文件的位置,源文件的位置,包所依赖的库以及这些库的路径。
这些变量名称以< PACKAGE NAME >_< PROPERTY >的形式出现:
- < NAME >_FOUND - 如果找到库,则设置为true,否则为false
- < NAME > _INCLUDE_DIRS或<NAME> _INCLUDES - 包导出的包含路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值