嵌入式Linux之Ubuntu学习笔记(Makefile规则格式)

Makefile里面是由一系列的规则组成的,这些规则格式如下:

目标:依赖文件集合

命令1

命令2

......

列:

main:main.o input.o calcu.o

gcc -o main main.o input.o calcu.o

命令列表中的每条命令必须以TAB键开始,不能使用空格!

我们分析上一章的makefile代码:

1 main: main.o input.o calcu.o

2 gcc -o main main.o input.o calcu.o

3 main.o:main.c

4 gcc -c main.c

5 input.o:input.c

6 gcc -c input.c

7 calcu.o:calcu.c

8 gcc -c calcu.c

9

10 clean:

11 rm *.o

12 rm main

上面代码是Makefile里面的代码,一个有5条规则,1-2为一条,3-4为一条,5-6为一条,7-8为一条,10-12为一条。

注释符:#

变量的引用方法:$(变量名)

赋值符:=

:= :

?= :前面没有被赋值,那就赋值。

+=:追加赋值

模式规则中,至少在规则的目标定定义中要包含%,否则就是一般规则,目标中的%表示对文件名的匹配,%表示长度任意的非空字符串,比如%.c就是所有的以.c结尾的文件,类似与通配符,a.%.c就表示a.开头,以.c结束的所有文件。

当%出现在目标中的时候,目标中%所代表的值决定了依赖中的%值,使用方法如下:%.o:%.c。

@:规则中的目标集合,在模式规则中,如果有多个目标的话,@表示匹配模式中定义的目标合集。

$%:当目标是函数库的时候表示规则中的目标成员名,如果目标不是库函数文件,那么其值为空。

\<:依赖文件集合中的第一个文件,如果依赖文件是以模式(即%)定义的,那么<就是符合模式的一系列的文件合集。

$?:所有比目标新的依赖目标集合,以空格分开。

\^:所有依赖文件的集合,使用空格分开,如果在依赖文件中有多个重复的文件,^会去除重复的依赖文件,值保留一份。

+:和^类似,但是当依赖文件存在重复的话不会去除重复的依赖文件。

\*:这个变量表示目标模式中%及其之前的部分,如果目标是test/a.test.c,目标模式为a.%.c,那么*就是test/a.test。

常用的三种:@,<,$^,我们使用自动化变量来完成。

为目标:如果文件名和命令相同了,设置一个伪目标就可以避免命令不会执行。

还有很多没讲,比如if判断语句,函数等等......

相关推荐
杜子不疼.几秒前
【Linux】库制作与原理(二):动态库的制作与使用
linux·运维·服务器
森焱森3 分钟前
嵌入式硬件工程师应知 白银快速分析报告
linux·c语言·arm开发·嵌入式硬件·去中心化
一战成名9968 分钟前
深度解析 CANN 模型转换工具链:从 ONNX 到 OM
人工智能·学习·安全·开源
RisunJan10 分钟前
Linux命令-lpq(查看打印队列状态)
linux·运维·服务器
山君爱摸鱼11 分钟前
Linux-服务进程
linux·运维·服务器
阿乐艾官12 分钟前
【linux文件系统重要目录及命令解释】
linux·运维·服务器
blueSatchel14 分钟前
U-Boot启动后做的事情
linux·u-boot
senijusene18 分钟前
Linux软件编程: Linux 操作系统基础与shell脚本
linux·运维·chrome
蒸蒸yyyyzwd28 分钟前
分布式算法学习笔记1.1-1.4
笔记·学习
予枫的编程笔记38 分钟前
【Linux进阶篇】Linux后台运行避坑指南:nohup、& 用法及Systemd守护进程实操
linux·进程管理·linux运维·nohup·systemctl·ps命令·kill命令