【Linux快速入门(三)】Linux与ROS学习之编译基础(Cmake编译)

简介: 【Linux快速入门(三)】Linux与ROS学习之编译基础(Cmake编译)

 目录

零.前置篇章

一.Cmake的由来

二.安装

三.创建并编写CMakeLists.txt

四.编译

五.优化CMakeLists.txt文件


零.前置篇章

  1. 【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)_ros linux-CSDN博客
  2. 【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)_linux和ros-CSDN博客

一.Cmake的由来

       CMake 是一个跨平台的安装(编译)工具,它使用简单的声明性语句描述所有平台的安装(编译过程)。

       Cmake可以自动生成MakeFile,其通过调用CMakeLists.txt直接生成Makefile。

二.安装

sudo apt install cmake

image.gif

image.gif 编辑

三.创建并编写CMakeLists.txt

       在d2lros2/d2lros2/chapt2/basic下使用vim编辑器新建CMakeList.txt文件:

image.gif 编辑

       向其中写入:

cmake_minimum_required(VERSION 3.22)
project(first_node)
include_directories(/opt/ros/jazzy/include/rclcpp/)
include_directories(/opt/ros/jazzy/include/rcl/)
include_directories(/opt/ros/jazzy/include/rcutils/)
include_directories(/opt/ros/jazzy/include/rmw)
include_directories(/opt/ros/jazzy/include/rcl_yaml_param_parser/)
include_directories(/opt/ros/jazzy/include/rosidl_runtime_c)
include_directories(/opt/ros/jazzy/include/rosidl_typesupport_interface)
include_directories(/opt/ros/jazzy/include/rcpputils)
include_directories(/opt/ros/jazzy/include/builtin_interfaces)
include_directories(/opt/ros/jazzy/include/rosidl_runtime_cpp)
include_directories(/opt/ros/jazzy/include/tracetools)
include_directories(/opt/ros/jazzy/include/rcl_interfaces)
include_directories(/opt/ros/jazzy/include/libstatistics_collector)
include_directories(/opt/ros/jazzy/include/statistics_msgs)
include_directories(/opt/ros/jazzy/include/service_msgs/)
include_directories(/opt/ros/jazzy/include/type_description_interfaces/)
include_directories(/opt/ros/jazzy/include/rosidl_dynamic_typesupport/)
include_directories(/opt/ros/jazzy/include/rosidl_typesupport_introspection_cpp/)
link_directories(/opt/ros/jazzy/lib/)
add_executable(first_node first_ros2_node.cpp)
target_link_libraries(first_node rclcpp rcutils)

image.gif

  • include_directories 是CMake构建系统中用来指定头文件搜索路径的命令。当你使用这个命令时,你告诉CMake在编译项目时要包含哪些目录,以便编译器可以找到所需的头文件(.h文件)。
  • link_directories 用于指定链接器搜索库文件(例如 .a.so 文件)的目录。当你需要链接到不在默认搜索路径中的库时,这个命令非常有用。
  • add_executable 是 CMake 中用于定义可执行文件的命令。当你使用 CMake 来构建一个项目时,你需要告诉 CMake 你想要构建哪些可执行文件,以及这些可执行文件是由哪些源文件编译而成的。
  • target_link_libraries用于指定目标(比如可执行文件或库)需要链接的库。当你定义了一个或多个可执行文件或库,并且它们依赖于其他库时,你需要使用 target_link_libraries 来告诉 CMake 如何将它们链接起来。

四.编译

       这里我们先创建一个项目代码下的新目录build:

mkdir build
cd build

image.gif

       在上级目录下找到CMakeList.txt文件,然后运行:

cmake ..

image.gif

       由于我们是在build目录下运行的命令,于是运行CMake后生成的makefile就保存在了build下:

image.gif 编辑

image.gif 编辑

       在build目录下运行make编译:

make

image.gif

image.gif 编辑

       然后在build目录下就生成了first_node节点

image.gif 编辑

五.优化CMakeLists.txt文件

       我们需要先了解一下find_package命令:

find_package是CMake中的一个命令,用于查找并加载外部项目的配置。在CMake中,当你想要使用其他库或项目时,find_package会尝试在系统中找到这些依赖项,并设置必要的变量以便在当前项目中使用它们。

       其将通过以下环境变量来指定查找路径:

<package>_DIR
CMAKE_PREFIX_PATH
CMAKE_FRAMEWORK_PATH
CMAKE_APPBUNDLE_PATH
PATH

image.gif

        于是我们可以把以上CMake文件修改为:

cmake_minimum_required(VERSION 3.22)
project(first_node)
find_package(rclcpp REQUIRED)
add_executable(first_node first_ros2_node.cpp)
target_link_libraries(first_node rclcpp::rclcpp)

image.gif

       接着也可以编译:

cmake ..
make

image.gif

image.gif 编辑

image.gif 编辑

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
ROS入门实践
本课程将基于基础设施即代码 IaC 的理念,介绍阿里云自动化编排服务ROS的概念、功能和使用方式,并通过实际应用场景介绍如何借助ROS实现云资源的自动化部署,使得云上资源部署和运维工作更为高效。
相关文章
|
12月前
|
存储 安全 Linux
|
8月前
|
存储 IDE Linux
零基础保姆级教程!手把手教你免费玩转Linux CentOS安装+学习环境搭建(附避坑指南)
本文详细介绍了在VMware虚拟机中安装CentOS 6.8的全过程。首先,需确保已安装VMware并开启V-CPU虚拟化功能,可通过BIOS设置或使用LeoMoon CPU-V工具检测。接着,下载CentOS镜像文件,并在VMware中新建虚拟机,配置CPU、内存、硬盘等参数。最后,加载ISO镜像启动虚拟机,按照提示完成CentOS的安装,包括语言、键盘、存储方式、地区、密码设置及硬盘分区等步骤。安装完成后,以root用户登录即可进入系统桌面,开始学习Linux命令和操作。
778 12
零基础保姆级教程!手把手教你免费玩转Linux CentOS安装+学习环境搭建(附避坑指南)
|
Linux Shell 数据安全/隐私保护
Linux 初学者必学的 10 个命令,学习!
【10月更文挑战第28天】
285 1
Linux 初学者必学的 10 个命令,学习!
|
Linux 开发工具
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
379 0
|
2月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
335 1
二、Linux文本处理与文件操作核心命令
|
2月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
252 137
|
2月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
578 57
|
29天前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
254 2
|
2月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
140 0
Linux内存问题排查命令详解