经常有人分不清= 、:=和+=的区别
首先你得清楚makefile的运行环境,因为我是linux系统,那么我得运行环境是shell
在Linux的shell里,shell只认识字符串,所以你就不要说整形什么的了。说值也不贴切。
1。 先看+=是什么意思?
因为shell只认识字符串,所以这里应该不难联想到+=就是字符串连接的意思。相当于c语言的
举个例子:
x本来是
那么运行结果就是
2. 再看?=是什么意思?
?=是条件赋值
比如:
foo ?= $(bar)
只有当foo变量还没有被定义的时候,才会将bar的值赋给foo。 注意,如果foo已经被定义过,但是是空值了话,?=不会给他赋值。比方说你的makefile是
foo = hello
foo ?= new
则最终foo的值是hello
如果你的makefile是
foo =
foo ?= new
foo的值是空
3。 接着理解:=和=
看下面的例子:
运行结果x 是all
将=改成:=
怎么样?有感觉了吧。这里=的话算$(x)的时候会一直搜索到文件最后,最后再赋值。
而:=则不会搜索后面的x值。也就是前面的是有效的而引用变量之后的就是无效的。