‘=’定义的叫递归展开式变量,用它给某个变量赋值,后面的表达式不会在定义时就展开,而是在make程序执行到他的相关操作的时候才展开——即用的时候才生效
‘:=’定义的叫直接展开式变量,赋值时将后面表达式的值马上展开传递给变量——即立即生效。
+=,-=这种是用来对变量进行追加定义的操作符,在原有的定义基础上加上或减去某个定义,比如去掉某个对象.o文件。
下面举个例子说明
makefile1:
bar=456
foo=${bar}
bar=${xxx}
xxx=123
all:
echo ${foo}
echo出来的结果123,foo的值在echo的时候,先被扩展成${bar},再递归的被扩展成${xxx},最终是123
makefile2:
bar=456
foo:=${bar}
bar=${xxx}
xxx=123
all:
echo ${foo}
此时,由于用了:=,在赋值的时候,foo的值就直接被扩展成bar在那个时刻的值,即456,,最终echo的结果就是456了。
+=就是在变量的尾部增加内容,如:
foo = abc
foo +=efg
则foo的值就是 abc efg