关于Makefile的常用语法总结

一、Makefile文件

Makefile文件中,本质就是有很多规则构成的,当执行make命令时,解析对应的规则的依赖关系是否成立,如果成立则执行对应的命令。

规则的构成:
	目标:依赖
		(tab键)shell命令

二、关键字

1. .PHONY关键字

.PHONY是一个特殊的目标声明(注意,前面有一个点)
用于告诉make工具,后面列出的目标是 “伪目标”(伪目标并不是一个真正的文件,而是一个动作或者命令的名称)

2. .SUFFIXES关键字

用于控制make工具如何处理具有不同后缀名的文件之间的依赖关系和隐式规则

清除默认的后缀规则,可以这样使用:

.SUFFIXES:

三、变量

(一)赋值

Makefile文件中变量的使用:
	变量名 = 变量值		--> 延迟赋值
	变量名 := 变量值		--> 立即赋值,变量的值会在引用时展开,如果变量在赋值后、使用前被修改,那么引用的将是修改后的值
	变量名 += 变量值		--> 追加赋值
	变量名 ?= 变量值		--> 询问赋值,如果变量被赋新值,则变量等于新值;如果没有被赋值,则使用默认值

(二)引用变量

	$(变量名)
	$@ : 目标
	$< : 第一个依赖文件
	$^ : 所有的依赖文件

(三)打印变量的值

$(warning variable_name: $(variable_value))
产生警告信息,但是make进程不会停止

$(info variable_name: $(variable_value))
简单输出信息,不产生警告格式

四、语法

(一)分支结构

ifeq ($(arch),arm)
	KERNELDIR := /home/linux/linux-5.10.61
else
	KERNELDIR := /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中引用变量$(变量)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值