ROS之CMakeLists.txt学习笔记

1.概述

CMakeLists.txt 是CMake编译系统的输入文件,用来运行CMake编译软件包。与标准CMakeLists.txt不同的是,用于catkin编译的CMakeLists.txt包含一些其他内容。

2.整体架构和顺序

  1. Required CMake Version (cmake_minimum_required)

  2. Package Name (project())

  3. Find other CMake/Catkin packages needed for build (find_package())

  4. Enable Python module support (catkin_python_setup())

  5. Message/Service/Action Generators (add_message_files(), add_service_files(), add_action_files())

  6. Invoke message/service/action generation (generate_messages())

  7. Specify package build info export (catkin_package())

  8. Libraries/Executables to build (add_library()/add_executable()/target_link_libraries())

  9. Tests to build (catkin_add_gtest())

  10. Install rules (install())

分项解释

3.CMake Version

每个CMakeLists.txt必须以CMake Version开头,catkin最低需要2.8.3的CMake。

cmake_minimum_required(VERSION 2.8.3)

4.Package name

下一项位package name。以此格式:

project(robot_brain)

在后面的程序中,如果需要使用工程名的话,可以用 $(PROJECT_NAME)。

5.Finding Dependent CMake Packages

如果需要用到其他包来构建我们工程,需要用到:

find_package(catkin REQUIRED COMPONENTS packagename1 packagename2)

catkin REQUIRED 为必需的。

5.1find_package的具体作用

如果CMake通过find_package发现一个包,它会创建几个CMake环境变量,提供有关找到的包的信息。 这些环境变量可以稍后在CMake脚本中使用。 环境变量描述了软件包导出头文件的位置,源文件的位置,软件包所依赖的库以及这些库的路径。 名称始终遵循<PACKAGE NAME> _ <PROPERTY>的约定:

     <NAME> _FOUND - 如果找到库,则设置为true,否则为false

     <NAME> _INCLUDE_DIRS或<NAME> _INCLUDES - 包中导出的包含路径

     <名称> _LIBRARIES或<名称> _LIBS - 由包导出的库

     <NAME> _DEFINITIONS - ?

5.2Boost

如果使用c++和Boost,你需要用find_package 包含Boost并且声明你所使用的是boost的哪一部分,例如:你要用 Boost threads,你应该这样写:

find_package(Boost REQUIRED COMPONENTS thread)

6.catkin_package()

catkin_package()是catkin提供的CMake的宏。必须作用在add_library()和add_exeutable()之前,有五个可选参数

  • INCLUDE_DIRS - The exported include paths (i.e. cflags) for the package

  • LIBRARIES - The exported libraries from the project

  • CATKIN_DEPENDS - Other catkin projects that this project depends on

  • DEPENDS - Non-catkin CMake projects that this project depends on. For a better understanding, see this explanation.

  • CFG_EXTRAS - Additional configuration options

例如:


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

7.构建指定目标

构建目标有多种形式,但通常可以有两个代表:

Exectable Target :可执行文件

Library Target :在构建或运行时由可执行目标运行的库

7.1目标命名

catkin要求命名唯一。但实际上是CMake内部的目标名称需要唯一,可用set_target_properties()来替换目标名称。例如:

set_target_properties(rviz_image_view
                      PROPERTIES OUTPUT_NAME image_view
                      PREFIX "")

8.Messages,Services,and Action Targets

add_message_files

add_service_files

add_action_files

之后必须加 generate_messages()

若有消息文件,则catkin_package()中需要加上

catkin_package(

CATKIN_DEPENDS message_runtime

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值