ROS----- catkin/CMakeList.txt

本文详细解析了CMakeLists.txt文件的结构与使用方法,包括CMake版本需求、项目命名、依赖包查找、Python模块支持、消息/服务/动作生成器、测试构建及安装规则。此外,还介绍了catkin_package宏的使用,以及如何处理Boost库。

1. 概述

文件CMakeLists.txt是用于构建软件包的CMake构建系统的输入。任何与CMake兼容的包都包含一个或多个CMakeLists.txt文件,该文件描述如何构建代码以及将代码安装到何处。用于catkin项目的CMakeLists.txt文件是一个带有一些附加约束的标准的普通CMakeLists.txt文件。

2. 总体结构与排序

CMakeLists.txt文件必须遵循这种格式,否则你的包将无法正确构建。配置中的顺序是重要的。

  1. 所需的CMake版本(Cmake_Minimum_Required)
  2. 功能包名称(project())
  3. 找到构建所需的其他CMake/Catkin包(find_Package())
  4. 启用Python模块支持(catkin_python_set())
  5. 信息/服务/动作生成器 (add_message_files(), add_service_files(), add_action_files())
  6. 调用消息/服务/动作生成 (generate_messages())
  7. 指定包构建信息导出(catkin_package())
  8. 要构建的库/可执行文件 (add_library()/add_executable()/target_link_libraries())
  9. 构建测试(catkin_add_gtest())
  10. 安装规则(install())

3.  详解

3.1 CMake Version

每个catkin CMakeLists.txt文件都必须从所需的CMake版本开始。catkin需要2.8.3或更高版本。

cmake_minimum_required(VERSION 2.8.3)

3.2 Package name

下一项是由CMake项目函数指定的包的名称。假设我们正在做一个叫做机器人大脑的功能包。

project(robot_brain)

注:在CMake中,你可以在以后的CMake脚本中的任何地方引用项目名称,方法是在需要的地方使用变量${PROJECT_NAME}。

3.3 Finding Dependent CMake Packages

然后,我们需要指定哪些其他CMake包需要使用来构建我们的项目。我们使用catkin_make的编译方式,至少需要catkin这个包。

find_package(catkin REQUIRED)

如果一个包是由CMake通过find_Package找到的,将会有一些CMake环境变量的产生,这些变量提供了有关查找包的信息。这些环境变量可以在以后的CMake脚本中使用。这些环境变量描述了包导出的头文件在哪里,源文件在哪里,包依赖于什么库,以及这些库的路径。名称遵循 <PACKAGE NAME>_<PROPERTY>的约定,例如:

  • <NAME>_FOUND :如果找到库,则设置为true,否则为false。
  • <NAME>_INCLUDE_DIRS or <NAME>_INCLUDES :包导出的头文件路径。
  • <NAME>_LIBRARIES or <NAME>_LIBS :由包导出的库文件。

需要的包我们都可用这种方式包含进来,比如我们还需要roscpp,rospy,std_msgs。我们可以写成:

find_package(roscpp REQUIRED)
find_package(rospy REQUIRED)
find_package(std_msgs REQUIRED)

这样的话,每个依赖的package都会产生几个环境变量,这样很不方便。所以还有另外一种方式:

find_package(catkin REQUIRED COMPONENTS
               roscpp
               rospy
               std_msgs
               message_generation
) 

这意味着roscpp、rospy、std_msgs、message_generation导出的头文件、库文件等路径也附加到catkin_变量上。例如,catkin_include_Dir不仅包含catkin的头文件路径,而且还包含其他功能包的头文件路径!

Boost:(Boost库是为C++语言标准库提供扩展的一些C++程序库的总称。)

如果使用C+和Boost,则需要在Boost上调用find_Package(),并指定将Boost的哪些方面用作组件。例如,如果你想使用Boost线程,可以说:

find_package(Boost REQUIRED COMPONENTS thread)

 

3.4 catkin_package()

这是一个catkin提供的cmake宏,当我们要给构建系统指定catkin的特定的信息时就需要了,或者反过来利用他产生pkg-config和CMake文件。这个函数必须在声明add_library()或者 add_executable()生成target之前使用。该函数有5个可选参数:

  • INCLUDE_DIRS:由功能包导出的头文件路径。
  • LIBRARIES:从项目导出的库。
  • CATKIN_DEPENDS:此项目所依赖的其他catkin项目。
  • DEPENDS:该项目所依赖的非catkin CMake项目。
  • CFG_EXTRAS:附加配置选项。

例如: 

catkin_package(
   INCLUDE_DIRS include
   LIBRARIES ${PROJECT_NAME}
   CATKIN_DEPENDS roscpp nodelet
   DEPENDS eigen opencv)

这表示:功能包文件中的include文件夹是头文件的导出位置;引用CMake环境变量$ {PROJECT_NAME},即"robot_brain";

“roscpp”+“nodelet”是构建/运行此功能包所需的包;“eigen”+“OpenCV”是构建/运行此包所需的系统依赖项。

 

http://wiki.ros.org/catkin/CMakeLists.txt#Package_name

http://wiki.ros.org/catkin/package.xml

https://blog.youkuaiyun.com/xuehuafeiwu123/article/details/53929834

https://blog.youkuaiyun.com/u013243710/article/details/35795841

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值