08 ROS阶段总结——package.xml 和 CMakeLists.txt 详细解读
01 ROS 基本搭建思路及流程
建立catkin基本工作空间
mkdir -p ~/catkin_ws/src //创建工作空间 cd ~/catkin_ws // 进入工作空间 catkin_make // 执行catkin的标准工作流程,即编译工作空间 source devel/setup.bash //配置工作环境
一次性解决方法:
- 终端输入:gedit
~/.bashrc
- 文件打开后直接翻到最后面
- 在底部添加source ~/catkin_ws/devel/setup.bash
- 保存退出即可
建立程序包,在src文件夹下
cd ~/catkin_ws/src // 进入src文件夹 catkin_create_pkg beginner_tutorials std_msgs rospy roscpp // 创建新程序包,依赖于std_msgs、 rospy 和roscpp
02 每个程序包内包含了package.xml 和 CMakeLists.txt 文件(位于workspace下)以及程序包文件夹,最核心的为src(非catkin_ws/src)内的.cpp或.py文件
(a) package.xml 是什么?——软件包清单,定义有关包的属性(名称、版本号、作者、维护以及其他catkin包的依赖关系)
结构(所有包至少有一个依赖关系,构建工具依赖于catkin)
<package> <name> //功能包的名字 <version> //功能包的版本 <description> //功能包内容的描述 <maintainer> //功能包的创建于维护者 <license> //软件发行版通行证 (例如: GPL, BSD, ASL) </package>
4种依赖包
<buildtool_depend>xxxx<buildtool_depend>// 指定编译此功能包的编译系统工具 <build_depend>xxxx<build_depend>// 指定编译此功能包需要的其他功能包,可以是功能包中的头文件、链接库、其他源文件。 <run_depend>xxxx<run_depend> // 指定运行此功能包代码需要的其他功能包。 <test_depend>xxxx<test_depend>// 指定单元测试需要的其他功能包
举例
<package> <name>foo_core</name> <version>1.2.4</version> <description> This package provides foo capability. </description> <maintainer email="ivana@willowgarage.com">Ivana Bildbotz</maintainer> <license>BSD</license> <url>http://ros.org/wiki/foo_core</url> <author>Ivana Bildbotz</author> <buildtool_depend>catkin</buildtool_depend> <build_depend>message_generation</build_depend> <build_depend>roscpp</build_depend> <build_depend>std_msgs</build_depend> <run_depend>message_runtime</run_depend> <run_depend>roscpp</run_depend> <run_depend>rospy</run_depend> <run_depend>std_msgs</run_depend> <test_depend>python-mock</test_depend> </package>
多个子功能包情况
<export> <metapackage />//使用Metapackages </export>
(b) CMakeLists.txt 文件——描述了如何构建程序以及在哪里安装程序包。
// CMakeListx.txt文件必须准守下面的这些守则,否则的话,程序包将不能被正确的构建。在配置文件中,下面的顺序很重要。 Required CMake Version (cmake_minimum_required) Package Name (project()) Find other CMake/Catkin packages needed for build (find_package()) Enable Python module support (catkin_python_setup()) Message/Service/Action Generators (add_message_files(), add_service_files(), add_action_files()) Invoke message/service/action generation (generate_messages()) Specify package build info export (catkin_package()) Libraries/Executables to build (add_library()/add_executable()/target_link_libraries()) Tests to build (catkin_add_gtest()) Install rules (install())
详细内容参考:https://junjun.blog.csdn.net/article/details/82709620,感谢分享!