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,感谢分享!

原文地址:https://www.cnblogs.com/Pygoupfs/p/15264677.html