ROS 2机器人开发--CMakeLists.txt 文件详解

很多小白宝宝第一次接触ROS开发,在写代码编译的时候不懂CMakeLists.txt 究竟是干什么的,本文对CMakeLists.txt 文件进行详解。

这篇文章告诉你每一行是干嘛的。

    CMakeLists.txt 是 CMake 构建系统的配置文件,用于定义项目的构建规则和依赖关系。CMakeLists.txt 是 CMake 的核心文件,用户通过这个文件告诉 CMake 如何构建项目。这个文件通常包括设置项目名称、版本号、语言标准、编译器选项、查找依赖包、添加可执行文件或库、链接依赖库、安装路径等。

        每一行代码的解释如下:

 版本要求:

cmake_minimum_required(VERSION 3.5)

这行代码设置了 CMake 的最低版本要求。CMake 是一个跨平台的构建工具,不同的版本可能有不同的功能。这行代码确保用户使用的 CMake 版本不低于 3.5,以保证项目能够正确构建。

 项目名称:

project(demo_cpp_pkg)

这行代码定义了项目的名称。项目的名称在构建过程中会用到,例如生成的库或可执行文件的名称通常会包含项目名称。

CMakeLists.txtpackage.xml 中的名称要一致,不然会报错!!!!

指定标准:

if(NOT CMAKE_C_STANDARD)
  set(CMAKE_C_STANDARD 99)
endif()

if(NOT CMAKE_CXX_STANDARD)
  set(CMAKE_CXX_STANDARD 14)
endif()

这行代码设置了默认的 C 和 C++ 标准。如果没有明确指定标准,CMake 会使用 C99 作为默认的 C 标准,C++14 作为默认的 C++ 标准。

 编译选项:

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

这行代码为特定的编译器(如 GNU C++ 和 Clang)添加编译选项。-Wall-Wextra 会启用更多的编译警告,-Wpedantic 会启用严格的 ISO C++ 标准检查。

 查找依赖包:

find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)

这行代码查找项目所需的依赖包。find_package 是 CMake 的一个命令,用于查找和加载外部库或包。REQUIRED 表示如果没有找到这些包,CMake 将报错。

添加可执行文件:

add_executable(talker src/talker.cpp)

 这行代码添加一个可执行文件,talker 是可执行文件的名称,src/talker.cpp 是源文件的路径。

添加依赖:

ament_target_dependencies(talker rclcpp std_msgs)

这行代码将可执行文件 talker 链接到依赖库 rclcppstd_msgs

 下载位置:

install(TARGETS
  talker
  DESTINATION lib/${PROJECT_NAME}
)

这行代码指定了可执行文件的安装路径。lib/${PROJECT_NAME} 是典型的 ROS 2 安装路径。

例子

好了,你已经学会了文件中所有代码的意思了,接下来给你个例子看一下,没有注释,但结合上文,你应该能看懂。

cmake_minimum_required(VERSION 3.8)
project(demo_cpp_pkg)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)

add_executable(person_node src/person_node)
ament_target_dependencies(person_node rclcpp)

install(TARGETS
person_node
DESTINATION lib/${PROJECT_NAME}
)

if(BUILD_TESTING)
  find_package(ament_lint_auto REQUIRED)
  set(ament_cmake_copyright_FOUND TRUE)
  set(ament_cmake_cpplint_FOUND TRUE)
  ament_lint_auto_find_test_dependencies()
endif()

ament_package()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哥兜兜有糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值