文章目录
- 一、Makefile文件
- 二、关键字
- 1. .PHONY关键字
- 2. .SUFFIXES关键字
- 三、变量
- (一)赋值
- (二)引用变量
- 四、语法
- (一)分支结构
- (二)\* 和 %通配符
- 五、函数
- (一)patsubst函数
- (二)wildcard函数
- (三)shell函数
- 六、执行
一、Makefile文件
Makefile文件中,本质就是有很多规则构成的,当执行make命令时,解析对应的规则的依赖关系是否成立,如果成立则执行对应的命令。
规则的构成:目标:依赖(tab键)shell命令
二、关键字
1. .PHONY关键字
.PHONY是一个特殊的目标声明(注意,前面有一个点)
用于告诉make工具,后面列出的目标是 “伪目标”(伪目标并不是一个真正的文件,而是一个动作或者命令的名称)
2. .SUFFIXES关键字
用于控制make工具如何处理具有不同后缀名的文件之间的依赖关系和隐式规则
清除默认的后缀规则,可以这样使用:
.SUFFIXES:
三、变量
(一)赋值
Makefile文件中变量的使用:变量名 = 变量值 --> 延迟赋值变量名 := 变量值 --> 立即赋值,变量的值会在引用时展开,如果变量在赋值后、使用前被修改,那么引用的将是修改后的值变量名 += 变量值 --> 追加赋值变量名 ?= 变量值 --> 询问赋值,如果变量被赋新值,则变量等于新值;如果没有被赋值,则使用默认值
(二)引用变量
$(变量名)$@ : 目标$< : 第一个依赖文件$^ : 所有的依赖文件
四、语法
(一)分支结构
ifeq ($(arch),arm)KERNELDIR := /home/linux/linux-5.10.61
elseKERNELDIR := /lib/modules/$(shell uname -r)/build/
endif
(二)* 和 %通配符
五、函数
(一)patsubst函数
patsubst
(二)wildcard函数
wildcard
(三)shell函数
$(shell shell命令)
调用shell命令
shell是Makefile的一个函数,用于执行括号内的命令。
命令会在Makefile被读取时(通常是make命令开始执行时)执行,而不是在Makefile中的某个规则(rule)被执行时。
六、执行
make 目标字符串 : 找到对应的Makefile文件中,规则的目标为"目标字符串"的规则,
然后判断依赖关系是否成立,如果成立则执行对应的shell命令,
如果依赖关系不成立则解析其它的规则,直到依赖关系成立。
Makefile中所有的变量都是字符串
- 注:SHELL中引用变量${变量};而Makefile中引用变量$(变量)