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

news/2024/10/15 5:46:27/

目录

零.前置篇章 

一.make的由来

二.安装make        

三.编写Makefile

四.编译运行

五.删除可执行文件


零.前置篇章 

  1.  第一篇【Linux快速入门】Linux与ROS学习之编译基础(gcc编译)_linux+ros-CSDN博客

一.make的由来

        "make"是一个用于自动化构建软件的工具,通常用于编译和构建程序。当你运行make命令时,make工具会查找当前目录下的Makefile文件,该文件包含了编译程序所需的指令和规则。

        make起初是人们为了简化g++编译而发明出来的批处理工具,通过其自动调用指令而进行编译。

二.安装make        

sudo apt install make

三.编写Makefile

        进入到d2lros2/d2lros2/chapt2/basic下使用vim新建Makefile。

        然后将上一篇中的的g++编译指令用下面的形式写到Makefile里(最好要熟悉或者会使用基础的vim指令)。

build:g++ first_ros2_node.cpp \-I/opt/ros/jazzy/include/rclcpp/ \-I /opt/ros/jazzy/include/rcl/ \-I /opt/ros/jazzy/include/rcutils/ \-I /opt/ros/jazzy/include/rmw \-I /opt/ros/jazzy/include/rcl_yaml_param_parser/ \-I /opt/ros/jazzy/include/rosidl_runtime_c \-I /opt/ros/jazzy/include/rosidl_typesupport_interface \-I /opt/ros/jazzy/include/rcpputils \-I /opt/ros/jazzy/include/builtin_interfaces \-I /opt/ros/jazzy/include/rosidl_runtime_cpp \-I /opt/ros/jazzy/include/tracetools \-I /opt/ros/jazzy/include/rcl_interfaces \-I /opt/ros/jazzy/include/libstatistics_collector \-I /opt/ros/jazzy/include/statistics_msgs \-I /opt/ros/jazzy/include/service_msgs/ \-I /opt/ros/jazzy/include/type_description_interfaces/ \-I /opt/ros/jazzy/include/rosidl_dynamic_typesupport/ \-I /opt/ros/jazzy/include/rosidl_typesupport_introspection_cpp/ \-L /opt/ros/jazzy/lib/ \-lrclcpp -lrcutils  \-o first_node#编译执行完后立刻删除first_node
clean:rm first_node

四.编译运行

        键入以下命令即可编译生成可执行文件:

make build

运行该文件:

./first_node

开启新终端,可查看ros节点列表:

ros2 node list

 

五.删除可执行文件

make clean


http://www.ppmy.cn/news/1539293.html

相关文章

java内存管理

Java内存管理主要涉及Java虚拟机(JVM)对内存的分配与回收过程。这一过程确保了Java程序在运行时能够有效地使用内存资源,同时避免了手动管理内存所带来的复杂性和潜在错误。 内存分配: 堆(Heap)&#xff1a…

[C++]智能指针

本篇文章介绍一下C里的四个智能指针:auto_ptr、unique_ptr、shared_ptr还有weak_ptr,除了auto_ptr(C98)以外,后三者是C11后才有。它们在使用上和普通的指针差别不大(可以使用解引用 * 和箭头 -> 来访问对…

Kubernetes ETCD的恢复与备份

在 Kubernetes 中,ETCD 扮演着至关重要的角色: 1. 集群状态存储 2. 服务发现 3. 配置管理 4. 分布式锁和协调 5. 故障恢复 ETCD 存储了 Kubernetes 集群中所有的状态信息,包括节点、Pod、Service、ConfigMap、Secrets 等。ETCD 支持服务发现…

SIGformer: Sign-aware Graph Transformer for Recommendation

SIGformer: Sign-aware Graph Transformer for Recommendation(Sigir24) 摘要 在推荐系统中,大多数基于图的方法只关注用户的正面反馈,而忽略了有价值的负面反馈。将正反馈和负反馈结合起来形成一个带符号的图,可以更…

【Go进阶】协程的创建以及通信

Goroutine 在 Go 语言中,协程(goroutine)是一种轻量级的执行线程。以下是关于协程的详细介绍: 一、定义与特点 轻量级:协程是一种非常轻量级的执行单元,相比传统的操作系统线程,协程的创建和…

实战篇:(三)项目实战Vue 3 + WebGL 创建一个简单的 3D 渲染应用

Vue 3 WebGL 创建一个简单的 3D 渲染应用 我们将使用 Vue 3 和 WebGL 创建一个简单的 3D 渲染应用。项目将展示如何在 Vue 组件中集成 WebGL,并渲染一个旋转的立方体。 1. 项目准备 首先,确保你已经安装了 Node.js 和 Vue CLI。如果还没有安装&#x…

flutter鸿蒙版本数据处理常用总集

写在前面 本地访问json 1. 确保文件路径正确 示例目录 确保文件 one.json 实际上位于项目的 assets/json/ 目录中。项目结构应该类似于: your_flutter_project/ │ ├── assets/ │ └── json/ │ └── one.json │ ├── lib/ │ └── mai…

vue3 element table 插槽外的数据更新,插槽内的数据未更新。

在使用element table组件时候,有时候需要对table内部的header插槽进行单独的列的数据操作,比如在列头增加一个筛选功能,对指定范围的值进行一个筛选,需要对input的值进行v-model的绑定,对绑定的值进行清空时候&#xf…