嵌入式学习之Linux入门篇笔记——17,makefile基本语法(上)

news2024/11/20 7:26:24

配套视频学习链接:http://【【北京迅为】嵌入式学习之Linux入门篇】 https://www.bilibili.com/video/BV1M7411m7wT/?p=4&share_source=copy_web&vd_source=a0ef2c4953d33a9260910aaea45eaec8
 

目录

一.设置 vim 首行缩进

二.Makefile 基本语法

三.Makefile 变量和变量赋值

四.自动化变量


一.设置 vim 首行缩进

vi /etc/vim/vimrc (rc 结尾的一般为配置文件)

输入 set tabstop=4,保存后退出即可。便发现 vim 打开后的缩进变成 4 个空格了

如果无法修改,需要以管理员权限进入 sudo vi /etc/vim/vimrc

二.Makefile 基本语法

语法格式:

        目标:依赖

        (tab)命令

举例:

目标:all

依赖:空

命令: gcc hello.c -o hello

上面的例子也可以写成:

目标:all 和 hello.o

依赖:hello.o 和 hello.c

命令: gcc hello.c -o hello 和 gcc -c hello.c -o hello.o

因为 all 依赖 hello.o 文件,所以要先执行 gcc -c hello.c -o hello.o 得到 hello.o 文件,然后才可以执行 gcc

hello.c -o hello。所以输入 make 命令后执行顺序如下。

在编译的时候,我们可以使用 make 目标来编译,如果我们不指定目标的话,默认执行的是第一个目标所对应的规则。也就是说 make 和 make all 是一样的。如上面的例子。

接下来,我们使用 make 目标的方法来编译。我们修改 makefile 代码如下:

然后我们输入命令 make clean 就可以直接执行 rm -rf *.o hello 命令。如下图所示:

但是,我们在当前目录下不能有和 makfile 目标名一样的文件。比如我在当前目录下创建一个名为

clean 的文件,然后在执行 make clean 命令就会报错。如下图所示:

为了解决这个问题,makfile 引入了一个新的概念,叫做伪目标,我们使用伪目标来声明 clean 就可以避免与当前目录下的同名文件发生冲突。

伪目标格式:

.PHONY:目标

所以,我们可以把上面的代码修改成如下图所示:

然后我们在执行 make clean 命令。尽管当前目录下有 clean 同名文件,make clean 命令也可以执行成功。如下图所示:

三.Makefile 变量和变量赋值

变量可以许多地方使用,比如目标,依赖,或者命令。

变量的赋值可以使用:=   ?=   :=   +=

变量的使用:通过 $() 来完成变量的引用。

示例 1:

使用 := 来赋值

使用 := 来给变量赋值,是立刻赋值在执行 var:=aaa 的同时变量值已经被确定了,所以最后打印为aaabbb,而不是 cccbbb

示例 2:

使用 = 来赋值

使用 = 来赋值,是延迟赋值使用他来赋值是 makfile 里面最后被指定的值。因为我们最后给变量 var1赋值为 ccc,所以最后打印为 cccbbb,而不是 aaabbb,如下图所示:

示例 3:

使用 ?= 来赋值

使用 ?= 来赋值的意思为,如果 var1 变量前面没有被赋值,那么就给他赋值为 ccc,如果前面已经赋值了,就使用前面的值,所以,打印为 aaabbb,而不是 cccbbb,如下图所示。

然后我们注释掉第一行代码,makefile 中的注释为#

在运行就会打印 cccbbb,因为前面没有给 var1 变量赋值。如下图所示

示例 4:使用 += 来赋值

使用 += 来赋值是追加赋值是在我们前面定义的好的字符串里面在添加进去新的字符串,所以运行会打印 aaa cccbbb。不过中间会有空格,如下图所示;

使用+=也类似与我们这样赋值,如下图所示:

如果赋值很长,我们也可以使用换行符 \,如下图所示

四.自动化变量

概念:不用定义,且会随着上下程序的不同而发生变化的变量

这里介绍三个最常用的自动化变量:

$@:表示所有目标

$<:表示第一个依赖文件,如果依赖模式是%,那么它就表示一系列文件。

(%为通配符,类似 linux 上的*)

$^:表示所有依赖。

在了解这个三个自动化变量之前,我们先来写一个程序:

main.c

hello.c

hello.h

Makefile

使用这个 makefile 虽然也可以成功编译,但是,一旦编译的文件多了,如果我们还这样来编写

makfile 就会变得非常的复杂。所以,自动化变量就排上用场啦。

接下来我们一步一步的来简化我这个 makefile。

简化一:用变量表示依赖文件

后面如果我们在增加依赖文件的话,我们直接在变量 var 后面增加就可以了。

简化二:

使用通配符%,和自动化变量$@ $<替代依赖和目标,简化完如下图所示:

简化三:使用自动化变量$^表示所有依赖,简化完如下图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1442584.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Transformer的PyTorch实现之若干问题探讨(二)

在《Transformer的PyTorch实现之若干问题探讨&#xff08;一&#xff09;》中探讨了Transformer的训练整体流程&#xff0c;本文进一步探讨Transformer训练过程中teacher forcing的实现原理。 1.Transformer中decoder的流程 在论文《Attention is all you need》中&#xff0…

电商小程序06用户审核

目录 1 创建自定义应用2 显示待办数量3 创建审核页面4 开发审核功能5 搭建布局6 最终效果总结 上一篇我们讲解了用户注册的功能&#xff0c;用户注册之后状态是待审核&#xff0c;需要管理员进行审核。通常给管理员提供一套PC端的软件进行相关的操作&#xff0c;在低代码中&…

ChatGPT高效提问—prompt常见用法(续篇五)

ChatGPT高效提问—prompt常见用法&#xff08;续篇五&#xff09; 1.1 种子词 ​ 种子词&#xff08;seed word&#xff09;通常指的是在对话中使用的初始提示或关键词&#xff0c;用于引导ChatGPT生成相关回复。种子词可以是一个词、短语或句子&#xff0c;通常与对话的主题…

问题:老年人心理健康维护与促进的原则为________、________、发展原则。 #媒体#知识分享

问题&#xff1a;老年人心理健康维护与促进的原则为________、________、发展原则。 参考答案如图所示

肯尼斯·里科《C和指针》第12章 使用结构和指针(1)链表

只恨当时学的时候没有读到这本书&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c; 12.1 链表 有些读者可能还不熟悉链表&#xff0c;这里对它作一简单介绍。链表(linked list)就一些包含数据的独立数据结构&#xff08;通常称为节点&#xff09;的集…

第5章 数据库操作

学习目标 了解数据库&#xff0c;能够说出数据库的概念、特点和分类 熟悉Flask-SQLAlchemy的安装&#xff0c;能够在Flask程序中独立安装扩展包Flask-SQLAlchemy 掌握数据库的连接方式&#xff0c;能够通过设置配置项SQLALCHEMY_DATABASE_URI的方式连接数据库 掌握模型的定义…

来自谷歌的新年礼物!速来免费领取2个月谷歌Gemini Advanced会员!价值280元!对标ChatGPT Plus!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

Vue3.3新特新和Vue3-Pinia

文章目录 1.Vue3.3新特性 - defineOptionsVue3.3新特性 - defineModel3.Pinia快速入门4.手动添加Pinia到Vue项目5.Vue3 - Pinia的基本语法6.action的异步实现7.Vue3-Pinia-storeToRefs方法8.Pinia持久化插件安装用法 1.Vue3.3新特性 - defineOptions 背景说明 有<script se…

项目02《游戏-11-开发》Unity3D

基于 项目02《游戏-10-开发》Unity3D &#xff0c; 任务&#xff1a;飞行坐骑 首先创建脚本&#xff0c; 绑定脚本&#xff0c; using UnityEngine; public class Dragon : MonoBehaviour{ [SerializeField] private float speed 10f; public Transfo…

redis-sentinel(哨兵模式)

目录 1、哨兵简介:Redis Sentinel 2、作用 3、工作模式 4、主观下线和客观下线 5、配置哨兵模式 希望能够帮助到大家&#xff01;&#xff01;&#xff01; 1、哨兵简介:Redis Sentinel Sentinel(哨兵)是用于监控redis集群中Master状态的工具&#xff0c;其已经被集成在re…

【Makefile语法 01】程序编译与执行

目录 一、编译原理概述 二、编译过程分析 三、编译动静态库 四、执行过程分析 一、编译原理概述 make&#xff1a; 一个GCC工具程序&#xff0c;它会读 makefile 脚本来确定程序中的哪个部分需要编译和连接&#xff0c;然后发布必要的命令。它读出的脚本&#xff08;叫做 …

blender几何节点中样条线参数中的系数(factor)是个什么概念?

一根样条线&#xff0c;通常由两个及以上的控制点构成。 每个控制点的系数&#xff0c;其实相当于该点处位于整个样条线的比值。 如图&#xff0c;一根样条线有十一个控制点。相当于把它分成了十段&#xff0c;那每一段可以看到x、y都是0&#xff0c;唯独z每次增加0.1&#xff…

单片机项目调试中的技巧和常见问题解决

单片机是嵌入式系统中的重要组成部分&#xff0c;在各种电子设备中发挥着重要的作用。在单片机项目开发过程中&#xff0c;调试是至关重要的一环&#xff0c;同时也会遇到一些常见问题。本文将介绍一些单片机项目调试的技巧以及常见问题的解决方法&#xff0c;希望能够对单片机…

跟着cherno手搓游戏引擎【22】CameraController、Resize

前置&#xff1a; YOTO.h: #pragma once//用于YOTO APP#include "YOTO/Application.h" #include"YOTO/Layer.h" #include "YOTO/Log.h"#include"YOTO/Core/Timestep.h"#include"YOTO/Input.h" #include"YOTO/KeyCod…

【开源】JAVA+Vue+SpringBoot实现班级考勤管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统基础支持模块2.2 班级学生教师支持模块2.3 考勤签到管理2.4 学生请假管理 三、系统设计3.1 功能设计3.1.1 系统基础支持模块3.1.2 班级学生教师档案模块3.1.3 考勤签到管理模块3.1.4 学生请假管理模块 3.2 数据库设…

深入理解java之多线程(一)

前言&#xff1a; 本章节我们将开始学习多线程&#xff0c;多线程是一个很重要的知识点&#xff0c;他在我们实际开发中应用广泛并且基础&#xff0c;可以说掌握多线程编写程序是每一个程序员都应当必备的技能&#xff0c;很多小伙伴也会吐槽多线程比较难&#xff0c;但因为其实…

春晚刘谦第二个魔术原理讲解

目录 1. 先说一下步骤&#xff1a;2. 原理讲解&#xff1a;2.1 第一步分析2.1 第二步分析2.1 第三步分析2.1 第四步分析2.1 第五步分析2.1 第六步分析2.1 第七步分析2.1 第八步分析2.1 第七步重新分析 小结&#xff1a; 首先&#xff0c;先叠个甲。我本人很喜欢刘谦老师&#x…

H12-821_23

23.网络管理员在某台路由器上查看BGP部居信息,邻居信息如图所示,关于该信息下列说法中正确的是? A.该路由器未从对等体接收到BGP路由前缀 B.本地路由器的Router ID为1.1.1.1 C.与对等体3.3.3 3接收、发送的报文数量分别为10、20个 D.与对等体3.3.3.3之间的邻居关系为IBGP对等体…

使用Arcgis裁剪

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、掩膜提取二、随意裁剪三、裁剪 前言 因为从网站下载的是全球气候数据&#xff0c;而我们需要截取成中国部分&#xff0c;需要用到Arcgis的裁剪工具 一、掩…

批归一化(Batch Normalization,简称BN)层的作用!!

批归一化&#xff08;Batch Normalization&#xff0c;简称BN&#xff09;层在卷积神经网络中的作用主要有以下几点&#xff1a; 规范化数据&#xff1a;批归一化可以对每一批数据进行归一化处理&#xff0c;使其均值接近0&#xff0c;方差接近1。这有助于解决内部协变量偏移&…