Makefile中四种常用等式(= := += ?=)与自动化变量$X的实例说明

1 引言

在阅读Makefile时经常会碰到一些“奇怪的符号”,比如?=、:= 、+=;还有$@,$<,$^等; 之前也都看过了解,但是时间一长,回过头来看就又忘记了,这里做个简单的记录,方便同样遇到困惑的同学查询。

1 四种常用等式(= := += ?=)

1.1 四种等式的作用

序号等式作用说明
1=延时变量,即make会将整个makefile展开后,再决定变量的值
2:=立即变量,即在定义时它的值就已经确定了
3?=如果没有被赋值过就赋予等号后面的值; 有赋值过,则还是原来的值
4+=在原先已赋值的内容后,再追加等号后面的值进去

1.2 举例说明:

#---------------------1、“=”
	#在shell执行make后会将整个makefile展开后,再决定变量的值。即延时变量,
	#也就是说,变量的值将会是整个makefile中最后被指定的值。
	#看例子:
	x = foo
	y = $(x) bar
	x = xyz
	
	#在上例中,y的值将会是 xyz bar ,而不是 foo bar 。
	
#---------------------2、“:=”
	#“:=”表示变量的值决定于它在makefile中的位置,
	#而不是整个makefile展开后的最终值。
	x := foo
	y := $(x) bar
	x := xyz
	
	#在上例中,y的值将会是 foo bar ,而不是 xyz bar 了。
	
#---------------------3、“?=”
	## ?=的作用上述代码的意思就是,如果变量 name 前面没有被赋值,
	##那么此变量就是“abc222”,
	##如果前面已经赋过值了,那么就使用前面赋的值
	name = abc111
	name ?= abc222
	print:                     
		@echo name:$(name)  
	#输出的结果为:  name:abc111

#---------------------4、“+=”
	##知识点① +=的作用给前面已经定义好的变量添加一些字符串进去
	OBJECT   :=main.o add.o 
	OBJECT   +=dec.o
	@echo OBJECT:$(OBJECT) 
	
	#在上例中,OBJECT的值将会是OBJECT:main.o add.o dec.o

2 自动化变量符号$X

2.1 自动化变量符号$X说明

  1. Makefile常用的为3个: $@ 、 $^ 和 $< ,,作用如下;
    在这里插入图片描述
  2. 其他用到的$X符号,作用如下:
    在这里插入图片描述

2.2 $X实例说明

 objects = main.o add.o dec.o
main: $(objects)   ##这里下面用$@表示目标main
	gcc -o $@ $(objects)

%.o : %.c  ##这里下面用$^和$<效果一样,因为如果依赖文件是以模式(即“%” )定义的,那么“$<”就是符合模式的一系列的文件集合
	gcc -c $^  
clean:
	rm *.o
	rm main

3 其他Makefile常用语法

除了以上2点,在Makefile阅读中还会遇到其他的“奇怪点”,比如通配符: %、*、?; 比如常用选项:-f-CM=-D;比如常用函数:foreachwildcardpatsubstsubst等,本人整理一篇Makefile常用知识点.pdf,由于篇幅有限,有兴趣的同学可-关.注-我的同名_公-众.号“慢慢Coding”,回复Makefile即可;

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

慢慢Coding

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

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

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

打赏作者

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

抵扣说明:

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

余额充值