makefile中变量赋值方法
赋值运算符:
1 =
2 ?=
3 :=
4 +=
5 define
变量赋值两种类型
Makefile中变量赋值分为两种方式:延时变量和立即变量
延时变量:使用该变量的时候,才展开该变量,并确定该变量的值(如"=","?=","define"定义的变量)
立即变量:定义的时候就已经确定了该变量的值(如":="定义的变量,即:=表示立即对变量赋值,并且会覆盖前面的值)
区分 "="与":="与"?="与"+="
符号 | 含义 | 变量类型 |
= | 递归赋值,当变量展开时,优先从后面展开 | 延时变量 |
:= | 该变量立即赋值(会覆盖前面的值),当变量展开时,优先从前面展开 | 立即变量 |
?= | 若前面没有定义该变量,则此处赋值,如果前面已经定义了,则此处不再赋值 | 延时变量 |
+= | 追加赋值 | 立即变量 |
举例验证:
x=before
y=$(x)_aaaa
x=later
xx:=before
yy:=$(xx)_aaaa
xx:=later
.PHONY: all
all:
@echo "\$$(x) = $(x)"
@echo "\$$(xx) = $(xx)"
@echo "y = $(y)"
@echo "yy = $(yy)"
执行make,结果如下:
lsy@ubuntu18:~$ make
$(x)=later
$(xx)=later
$(y)=later_aaaa
$(yy)=before_aaaa