介绍:CMakeLists.txt定义了如何构建项目,包括哪些源文件需要编译,依赖关系如何处理,如何生成可执行文件和库,以及如何安装和测试生成的目标。

文章约定:

  • 环境:ROS1
  • 基于 catkin 构建工具
  • 遵循:Catkin CMakeLists.txt - ROS
  • 如有错误,请包容,以及麻烦在评论区勘误
  • 书山有路勤为径,学海无涯苦作舟

1. CMakeLists.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())

CMakelists.txt框架:

  • cmake版本cmake_minimum_required()
  • 包名称project()
  • 指定依赖项find_package()
  • 启用对python模块的支持catkin_python_setup()
  • 消息/服务/动作通讯生成器add_message_files(), add_service_files(), add_action_files()
  • 调用 消息/服务/动作通讯generate_messages()
  • 定义和导出包的属性和信息catkin_package()
  • 要构建的库/可执行文件add_library(), add_executable(), target_link_libraries()
  • 构建测试catkin_add_gtest()
  • 安装规则install()

2. 详解

2.1 cmake版本

使用:

cmake_minimum_required(VERSION 2.8.3)

catkin至少需要 2.8.3 或更高版本。


2.2 包名称

使用:

project(robot)

在定义包名后,可用在文件中任意位置使用 ``${PROJECT_NAME} 替代包名。


2.3 find_package()

本宏主要用于指定包构建时需要的依赖项,至少包含:

find_package(catkin REQUIRED)

REQUIRED:如果查找不到该包或组件信息,报错并停止。

添加其它依赖项:例如添加 nodelete

find_package(nodelete REQUIRED)

当存在很多时,这显然不太方便:

find_package(catkin REQUIRED COMPONENTS nodelet)

说明:

  • COMPONENTS:指定你要查找的特定子模块或组件