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

本文介绍了如何在Vim中设置首行缩进,以及Makefile的基本语法、变量赋值(使用=,?,+=)和自动化变量的应用。通过实例演示了Makefile的依赖管理与伪目标的概念,以简化大型项目的构建过程。
摘要由CSDN通过智能技术生成

配套视频学习链接: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 后面增加就可以了。

简化二:

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

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

嵌入式-C语言-9-Makefile/结构体/联合体
m0_65486182的博客
02-15 754
一、Makefile 1.1.问:如果项目产品代码有1万源文件.c,编译极其的繁琐 gcc -o main main.c a.c b.c .... 一个万.c 这么简化程序的编译呢? 答:必须只能利用Makefile来实现 1.2.Makefile功能:能够制定编译规则,将来让gcc编译器根据这个规则来编译程序,Makefile本质就是一个文本文件,此文件给make命令使用,将来make命令会根据Makefile里面的编译规则让gcc...
嵌入式linux之buildroot(四)make命令
嵌入式开发
01-18 1882
make命令
嵌入式系统——Makefile基础知识
weixin_43229184的博客
12-07 805
Makefile基础知识,库文件的编译和链接
嵌入式Linux学习笔记10——关于Makefile的简单使用
masudong的博客
08-19 189
Makefile简介: 在Linux中使用make命令来编译程序,特别是大程序。而make命令所执行的动作依赖于Makefile文件。 ②Makefile的核心——"规则" ③Makefile基本语法结构: 目标:依赖1 依赖2 … [TAB]命令 注意:当“目标文件”不存在或者某个依赖文件比目标文件“新”时,则执行“命令” ④Makefile的简单语法: 1、%.o:通配符,表示 “.o” 类型的文件 2、$@:表示 “目标” 3、$<: 表示第一个依赖文件 4、$^:表示所有依赖文件 5、.
嵌入式学习——知识点总结】Make工程管理
LIUSU_SU的博客
08-14 651
如何执行make:最常用的形式是只输入make就可以的(此时进入makefile这个文件之后,会将遇到的第一个目标作为自己的首要目标来进行执行,只要该首要目标被完成了,就直接会终止Makefile文件的执行)...
(自学笔记)最全嵌入式Linux学习手册.docx
09-10
《(自学笔记)最全嵌入式Linux学习手册》是一本深入浅出的教程,旨在帮助初学者掌握嵌入式Linux系统开发的各个环节。书中详细介绍了从基础的Linux操作系统安装和工具使用,到复杂的硬件部件编程、内核移植以及GUI系统...
嵌入式Linux+入门笔记.pdf
03-12
嵌入式Linux是一种将Linux操作...通过“嵌入式Linux+入门笔记”这份教程,初学者可以系统地学习这些知识点,逐步建立起完整的嵌入式Linux开发框架。结合实践项目,将理论与实际相结合,将有助于更好地掌握这门技术。
嵌入式Makefile学习笔记
donke_dong
10-15 873
注: 以下内容来自朱老师物联网大讲堂课件 1. 为什么需要Makefile 工程项目中c文件太多管理不方便,因此用Makefile来做项目管理,方便编译链接过程。 在一个正式的软件项目中,由很多个.c和.h文件构成,此时如果直接在命令行编译,就会像这样:gcc a.c b.c c.c d.c e.c f.c g.c -o exe 每次编译都要输入一堆东西很麻烦,这个问题严重影响工作效率,所以我们就使用Makefile来进行管理 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make
申延超_嵌入式Linux应用开发完全手册笔记_Makefile介绍
06-15
总之,《申延超_嵌入式Linux应用开发完全手册笔记_Makefile介绍》笔记涵盖了Makefile的基本概念、语法、常见用法以及在嵌入式Linux环境中的实际应用,对于提升开发效率和维护代码质量具有重要意义。熟悉并掌握...
嵌入式Linux学习笔记Linux内核裁剪
zhangguilin11111的博客
03-25 1601
1.复制/arch/$(ARCH)/configs/xxxx_defconfig.config到.config,.config是作为编译时默认使用的配置文件2.子文件夹下的Kconfig声明对应的选项和相关说明,Makefile指明选项对应的.o文件,autoconf.h决定哪些选项可以被编译进内核,.config决定这些选项是怎么编译进内核,所以内核要增加一项功能时,需要修改对应目录下Kconf...
Vim命令行参数与Makefile
最新发布
weixin_73885716的博客
01-21 1119
Linux下,​Vim 是一个高度可配置的文本编辑器,旨在非常高效地创建和更改任何类型的文本,它对于我们程序开发者来说,是一件非常好用的工具 ​makefile是一个非常重要的工具,它可以自动化编译和构建过程,但我们需要先进行编辑
嵌入式Linux应用开发基础知识(四)——Makefile语法
FourLeafCloverLLLS的博客
08-06 1307
什么是通配符?学过其他编程语言的可能只要什么叫通配符,通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件。当查找文件夹时,可以使用它来代替一个或多个真正字符。Makefile具有较多通配符,但是常见的也就几种。如下所示:以下为上节课我们使用的Makefile文件 我们将使用通配符进行改进,实现我们使用%.o和%.c文件进行改进, 运行逻辑: $@表示目标 , $...
一个简单Makefile
yang889999888的博客
06-09 420
Makefile简介 在软件开发中,make通常被视为一种软件构建工具。该工具主要经由读取一种名为“makefile”或“Makefile”的文件来实现软件的自动化建构。它会通过一种被称之为“target”概念来检查相关文件之间的依赖关系,这种依赖关系的检查系统非常简单,主要通过对比文件的修改时间来实现。在大多数情况下,我们主要用它来编译源代码,生成结果代码,然后把结果代码连接起来生成可执行
Linux嵌入式开发——Makefile基本语法
weixin_66578482的博客
02-08 1269
Linux嵌入式开发——Makefile基本语法 一、Makefile 规则格式 二、Makefile 变量 2.1、赋值符“=” 2.2、赋值符“:=” 2.3、赋值符“?=” 2.4、变量追加“+=” 三、Makefile 模式规则 四、Makefile 自动化变量 五、Makefile 伪目标
嵌入式】分享一个嵌入式Makefile的通用Demo
Nonoas的博客
10-25 396
1.前言之前因为稍微学了点Makefile基本语法,所以就想着自己写个Makefile,一来以后自己作参考,二来也是可以复习下之前的一些命令,三来就是分享啦~2.基本功能键入make:*自动生成elf、lst、hex、bin、o文件;*判断当前目录下是否有输出文件output、二进制文件obj的文件夹,若无,则新建,有则不执行;*将输出文件和目标文件自动移动值对应文件夹;键入make DEBUG...
嵌入式学习笔记(十二) --Makefile简单配置与使用
本末实验室
06-28 2500
谈不上什么理解,姑且先记录一下吧。一是方便以后有不懂随时翻来看看,二是以后对Makefile理解深了再做补充吧! 一、Make简介 工程管理器,顾名思义,是指管理较多的文件 Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大量的编译工作 Make将只编...
Makefile常用到的四种赋值方式(= := += ?=)说明
静叶思秋的博客
08-08 8163
前言  在浏览makefile文件时,我们是否经常遇到=、:=、= 、?=这四种赋值方式,并为它们之间的区别与用法感到疑惑,下面我们就逐一来说明它们的用法。 1、符号【=】  符号【=】是最基本的赋值方式,与在文中位置无关,系统自动推导将最终的赋值作为该变量的值。  例(1)在获取str变量上面定义赋值 str=123 target: @echo $(str) 输出: fashion@ubuntu:~/vscode/test$ make 123  例(2)在获取str变量下面定义赋值 target:
Linux + MakefileMakefile中的.PHONY作用以及赋值运算(各种=符号)的区别
热门推荐
一个专注于嵌入式IoT领域的架构师,深耕IoT领域多年,深度掌握IoT领域的相关技术栈,包括但不限于RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、嵌入式IoT系统的架构设计等。
01-19 9万+
Linux + MakefileMakefile中的.PHONY作用以及赋值运算(各种=符号)的区别,本文带你了解一下!
Linux makefile 教程 非常详细,且易懂
miss_hui97的博客
05-23 4329
 最近在学习Linux下的C编程,买了一本叫《Linux环境下的C编程指南》读到makefile就越看越迷糊,可能是我的理解能不行。            于是google到了以下这篇文章。通俗易懂。然后把它贴出来,方便学习。           后记,看完发现这篇文章和《Linux环境下的C编程指南》的makefile一章所讲述的惊人的相似,只是这篇文章从一个实例切入,在有些地方比较好理解。能让...
嵌入式Linux系统开发实战指南——基于ARM
"嵌入式Linux系统开发技术详解——基于ARM(14章全)" 本书是一部详尽解析嵌入式Linux系统开发的教程,专为基于ARM架构的嵌入式平台设计。随着Linux内核的不断演进,特别是在Linux 2.6版本之后,嵌入式Linux在各种...
写文章

热门文章

  • STM32串口通信—串口的接收和发送详解 22737
  • 学习素材之USART篇——通过使用STM32与ESP8266(esp-01s)连接阿里云系列操作来了解USART协议和寄存器操作 16960
  • 使用STM32F103C8T6与蓝牙模块HC-05连接实现手机蓝牙控制LED灯 5718
  • 到底什么是哈希值,哈希值到底是怎么生成的,有什么用? 5304
  • Samba是什么?有什么作用?工作流程以及如何搭建 4539

分类专栏

  • 与ChatGPT对话获得的嵌入式方向琐碎知识库 7篇
  • 与ChatGPT对话获得的嵌入式方向代码库 7篇
  • 工作学习 11篇
  • 网络协议 1篇
  • C语言 4篇
  • STM32 8篇
  • 嵌入式学习之Linux入门篇 32篇
  • 蓝桥杯 15篇
  • 嵌入式学习之Linux系统编程篇 1篇
  • FreeRTOS学习 2篇

最新评论

  • 通过指令使 J-Link 第19脚5V-Supply输出5V供电

    玄奕子: 这个指令只是控制那个口出5V电,如果接单片机灯变红,自己检查一下是不是有什么地方短路了

  • 学习素材之USART篇——通过使用STM32与ESP8266(esp-01s)连接阿里云系列操作来了解USART协议和寄存器操作

    游螭: 写的非常全面啊表情包

  • 通过指令使 J-Link 第19脚5V-Supply输出5V供电

    woookeer: 我输入指令后,连单片机,灯就变红了,要怎么弄啊

  • STM32串口通信—串口的接收和发送详解

    玄奕子: 本资源已上传csdn,并且与本文章已绑定,可直接从本文章进入下载界面进行下载

  • STM32串口通信—串口的接收和发送详解

    玄奕子: 本资源已上传csdn,并且与本文章已绑定,可直接从本文章进入下载界面进行下载

最新文章

  • GPT对话知识库——编写IIC驱动的过程
  • GPT对话知识库——将寄存器中的一位数据读到变量中需要什么步骤?&C语言中掩码的作用。
  • GPT对话知识库——串口通信的数据的组成?起始位是高电平还是低电平?如何用代码在 FreeRTOS 中实现串口通信吗?如何处理串口通信中的数据帧校验吗?
2024
09月 11篇
08月 11篇
07月 2篇
06月 4篇
05月 1篇
04月 15篇
03月 10篇
02月 26篇
01月 8篇
2023年2篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

玄奕子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值

玻璃钢生产厂家四川玻璃钢雕塑生产环保的玻璃钢花盆湖北玻璃钢字母座椅雕塑树脂玻璃钢雕塑公司哪家好成品玻璃钢花盆供货商陕西玻璃钢雕塑模型河南玻璃钢花盆报价动物蝴蝶草坪玻璃钢雕塑太原玻璃钢骆驼雕塑巫山浮雕玻璃钢雕塑苏州玻璃钢雕塑费用北京商场室外美陈公司赣州户外玻璃钢雕塑定做价格天津玻璃钢冰棒雕塑成都欧式玻璃钢雕塑销售厂家信阳水景玻璃钢雕塑盐城玻璃钢卡通门头雕塑设计盘龙区玻璃钢雕塑加工安庆佛像玻璃钢雕塑销售厂家玻璃钢雕塑抛光东川区玻璃钢雕塑价格河南走廊商场美陈生产企业衡南玻璃钢花盆花器长春玻璃钢艺术摆件景观雕塑厂家玻璃钢花盆手绘大同玻璃钢广场雕塑定制玻璃钢雕塑火凤凰宜春环保玻璃钢雕塑哪家便宜卡通雕塑玻璃钢公司地址商场美陈警示语香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化