Makefile赋值符 = := ?= +=

[ = ]  与c语言类似,有一个特点就是在Makefile完全展开后,变量取最后一次的赋值。如:
x = foo
y = $(x) bar
x = abc
此时y值是abc bar,而不是foo bar。
[:=] 与前面[=]对比,[:]表示变量值取决于它在makefile中的位置,而不是等makefile展开后的值。如:
x := foo
y := $(x) bar
x := abc
此时y值时foo bar,而不是abc bar。
[?=] 表示若变量没有被赋值过,则就赋等号后面的值,如:
foo ?= $(bar)
此时只有当foo在前面没有被赋值时,才会将bar的值赋给foo。
关于定义为空值:
foo已经被定义过且为空值时,?= 也不会给其赋值。如:
foo = hello
foo ?= world
此时foo值时hello, 因为之前有赋值。
若如下:
foo = 
foo ?= world
此时foo值也是为空,因为空值也是值。
[+=] 表示追加等号后面的值
[$(x)] 表示引用变量x, 一般调用的为:=赋值的值
[$(PWD)] 表示当前目录
[%] 通配符,比如a.c  b.c c.c a.b,则用%.c,则匹配出a.c b.c c.c
[*] 通配符,表示所有,比如有a.c b.c c.c a.b,用*.c,则匹配出a.c b.c c.c
[$@] 表示目标文件
[$^] 表示所有依赖文件
[$<] 表示第一个依赖文件

你可能感兴趣的:(COMPILER)