转眼间又是一个轮回,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