【ROS学习】(三)package.xml和CmakeList.txt文件的编写
来源:互联网 发布:淘宝必须用支付宝吗 编辑:程序博客网 时间:2024/05/16 06:50
package.xml和CmakeList.txt文件是生成程序包和节点的重要配置文件,在开始编写我们的程序之前,对这两个文件的编写需要有一定的了解。
1.package.xml。
package.xml实际上是一个程序包的描述文件,以下参考ros百科入门教程中的一个xml文件来解读。
<?xml version="1.0"?><package> <name>beginner_tutorials</name> <version>0.1.0</version> <description>The beginner_tutorials package</description> <maintainer email="you@yourdomain.tld">Your Name</maintainer> <license>BSD</license> <url type="website">http://wiki.ros.org/beginner_tutorials</url> <author email="you@yourdomain.tld">Jane Doe</author> <buildtool_depend>catkin</buildtool_depend> <build_depend>roscpp</build_depend> <build_depend>rospy</build_depend> <build_depend>std_msgs</build_depend> <run_depend>roscpp</run_depend> <run_depend>rospy</run_depend> <run_depend>std_msgs</run_depend></package>
在描述文件中,有几个重要的参数需要注意,出错将导致编译无法通过,一个是name,决定了编译出的程序包的名称,另外是build_depend和run_depend,它们指明了程序包编译和运行的依赖项,通常是所用到的库文件的名称。这三个参数需要根据自己的需要修改,其他的参数更多的是程序维护这的信息。
实际上,上面的xml文件是一种旧的书写格式,现在ros支持新的书写格式,与第一中格式的差别不大,并且ros对两种xml文件格式都是兼容的,新格式的xml文件可以参照下面的写法
<package format="2"> <name>node_example</name> <version>0.0.1</version> <description> Example. </description> <author>Thomas Denewiler</author> <maintainer email="tdenewiler@gmail.com">Thomas Denewiler</maintainer> <license>BSD</license> <url>https://github.com/tdenewiler/node_example</url> <buildtool_depend>catkin</buildtool_depend> <build_depend>message_generation</build_depend> <depend>roscpp</depend> <depend>rospy</depend> <depend>std_msgs</depend></package>
可以看到,新版本相对旧版本的区别主要在于不区分build_depend和run_depend,更多的关于两种package.xml描述文件以及它们的区别,可以参考下面的网页
http://wiki.ros.org/catkin/package.xml
http://wiki.ros.org/cn/ROS/Tutorials/CreatingPackage
2.CmakeList.txt
下面来研究一下CmakeList.txt文件的编写方式,先预览一下一个完整的需要包括的内容
cmake_minimum_required()
要求的CMake最低版本
project()
程序包的名称
find_package()
编译依赖的程序包
add_message_files(), add_service_files(), add_action_files()
添加消息、服务或响应文件
generate_messages()
生成消息、服务或响应文件
catkin_package()
catkin程序包
add_library()/add_executable()/target_link_libraries()
添加库文件,可执行文件,链接库文件
catkin_add_gtest()
添加测试单元
install()
安装
前两个参数都很好理解,不再赘述。
find_package()作用是指定编译工程需要的其他程序包,这个函数的参数至少要包括catkin REQUIRED,我们来看一个典型的find_package()包含的内容。
find_package(catkin REQUIRED COMPONENTS roscpp std_msgs message_generation sensor_msgs)
catkin_package()是catkin提供的CMake宏,对生成的pkg和CMake文件进行配置,如果去掉编译也能通过,但是配置会发生变化,比如生成的可执行文件会在工作空间中的build文件夹中而不是devel/lib文件夹中,这样可能导致的一个后果是无法使用rosrun指令来运行可执行文件。
add_message_files()和generate_messages()是在使用用户自定义消息时需要添加,这部分可以在学习添加自定义消息时再深入学习。
add_executable()
指定要编译的可执行文件,例如
add_executable(myNode src/main.cpp src/file1.cpp src/file2.cpp)
上面的语句将调用src/main.cpp,src/file1.cpp和src/file2.cpp生成名为myNode的目标可执行文件,生成的可执行文件就是我们说的节点。
add_library()
生成库文件
target_link_libraries()
指定所生成的可执行文件所链接的库文件,通常写在add_executable()之后。一般来说,要生成一个ros节点,必须添加catkin_LIBRARIES,例如
target_link_libraries(myNode ${catkin_LIBRARIES})
install()
install()是一个可选项,通常在程序编译完后,目标可执行文件被放在工作空间的devel文件夹中,但通常我们希望把目标放在系统中,这样程序包就可以作为被其他人使用,作为其他程序的依赖项。具体做法可以参考ros wiki http://wiki.ros.org/catkin/CMakeLists.txt
- 【ROS学习】(三)package.xml和CmakeList.txt文件的编写
- ROS中 package.xml CMakeList.txt launch文件
- ROS下的CMakeList.txt编写
- cmakelist.txt文件编写
- ROS学习之CMakelists.txt和package.xml
- ROS学习(五):package.xml 文件
- Ros搭建service和message时包中CMakelist.txt 的generate_messages
- 用Qt打开ros的界面(CmakeList.txt)
- CMake 基本使用方法--写CMakeList.txt,Compile ROS package
- ROS基础学习笔记——工作空间、CMakeList、package.xml
- 怎样编写Cmake的配置文件Cmakelist.txt
- ROS CMakeLists.txt的编写学习(一)
- ROS之catkin介绍(CMakeLists.txt 、package.xml)
- 用qt5.3.2打开ros(机器人操作系統)的界面(CmakeList.txt)
- 用qt5.3.2打开ros(机器人操作系統)的界面(CmakeList.txt)
- 阅读 apiextractor 的CMakeList.txt文件
- makefile和Cmakelist.txt的区别
- makefile和Cmakelist.txt的区别
- poj--2239--Selecting Courses(最大匹配)
- git常用命令学习笔记
- Android 的自定义等待对话框
- 九宫格拼图 我的java学习之路
- 504 Gateway Time-out
- 【ROS学习】(三)package.xml和CmakeList.txt文件的编写
- acct(系统调用)
- IOS学习之提示框第三方库之MBProgressHUD
- ZOJ 1042 W's cipher
- USACO-Section 3.1 Score Inflation(DP)
- Netty那点事(2)Netty中的buffer
- AngularJS去掉的URL里的#号
- cocos studio 半角空格和全角空格
- Netty那点事(1)概述