ROS Package构建过程中的CMakeLists文件分析

本文详细介绍了ROS Package构建过程中CMakeLists.txt文件的作用和内容,包括CMake版本声明、软件包名称设定、依赖包搜索、Python模块支持、消息服务生成器的使用、构建目标设定及代码测试等关键点,旨在帮助开发者理解和掌握ROS包的构建流程。
摘要由CSDN通过智能技术生成

转眼间又是一个轮回,2018年6月之后因为一些事情就没有再更新博客,重新写的时候已是2019年的5月,然后2019年6月之后,因为精力投向了其它方面就又停了,现在重新提笔又是5月,只不过是2020年的5月。最近写代码,遇到了一些编译链接上的问题,想写下来。因为这些问题都跟ROS中的构建系统有关,所以首先就找到了官网的教程,以下内容,只是个人对其的翻译和理解。

1. 概述

CMakeLists.txt文件作为CMake软件构建系统的切入点,任何使用CMake系统进行构建的软件包都包含一个或多个CMakeLists.txt文件,用以描述如何进行代码构建和部署。而在ROS的catkin工程中使用的CMakeLists.txt文件符合标准的vanilla CMakeLists.txt文件格式,只有些许针对性的限制。

2.文件结构和次序

CMakeLists.txt文件具有固定的格式,甚至有时候自己编写时,其格式所包含的关键指令次序不对,也会引发各种问题。在ROS中,新创建一个包时会附带创建一个CMakeLists.txt,先看一下带有部分自带信息的CMakeLists.txt文件,去掉了暂时用不到指令和说明。

cmake_minimum_required(VERSION 2.8.3)   // 所需要的 CMake 版本

project(yumi_test)                      // 软件包名称

add_compile_options(-std=c++11)         // 使用 C++11 标准进行编译,支持 Kinetic 及之后的版本

find_package(catkin REQUIRED COMPONENTS // 搜索 build 需要的软件包
  geometric_shapes
  moveit_core
  moveit_ros_planning
  moveit_ros_planning_interface
  pcl_conversions
  pcl_ros
  pluginlib
  rosbag
  roscpp
  tf2_eigen
  tf2_geometry_msgs
  tf2_ros
  yumi_hw
  message_generation
)

find_package(Boost REQUIRED system filesystem date_time thread)

# catkin_python_setup()                // python 模块支持

add_message_files(                     // 添加 msg 文件夹中自定义的 msg 消息
   FILES
   Message.msg
 )

 add_service_files(                    // 添加 srv 文件夹中自定义的 srv 服务消息
   FILES
   Service.srv
 )

add_action_files(                      // 添加 action 文件夹中自定义的 action 消息
   FILES
   Action.action
 )

 generate_messages(                    // 消息生成宏命令
   DEPENDENCIES
   tf2_geometry_msgs                   // 消息生成所依赖的其它消息类型
 )

# generate_dynamic_reconfigure_options(// 生成cfg文件夹定义的动态配置参数
#   cfg/DynReconf.cfg
# )

catkin_package(                        // 为软件包生成 CMake 配置文件
  INCLUDE_DIRS include                 // 当前软件包将要导出的头文件存放目录
  LIBRARIES ${PROJECT_NAME}            // 当前软件包将要导出的库
  CATKIN_DEPENDS Boost Eigen geometric_shapes moveit_core moveit_ros_planning 
  moveit_ros_planning_interface pcl_conversions pcl_ros pluginlib rosbag roscpp 
  tf2_eigen tf2_geometry_msgs tf2_ros message_runtime
  DEPENDS system_lib
)

include_directories(                   // 指定额外的头文件位置,当前软件包的头文件位置放在最前面
  include                              // 当前软件的头文件位置
  ${catkin_INCLUDE_DIRS}               // 生成的软件所依赖的头文件的路径变量
)

add_library(${PROJECT_NAME}            // 构建 C++ 库目标
   src/${PROJECT_NAME}/yumi_motion.cpp
 )

add_dependencies(${PROJECT_NAME}       // 为构建的库目标添加依赖
	${${PROJECT_NAME}_EXPORTED_TARGETS} 
	${catkin_EXPORTED_TARGETS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值