makefile中$(var)和$$(var)

makefile中我们经常看到$(var),表示对var的引用,它其实是读取makefile中的变量var,然后将其扩展开,传给shell命令。

但是不要轻易的认为这个makefile中var就和shell中var是同一个变量了,shell中的var是一个内置变量,其值是由makefile传递给shell的。

而$$(var)是用来访问shell内定义的变量(不是makefile中定义的变量)。如果某个规则是由多个shell命令构成,如果每句之间没有用;和\连接起来的话,其实它们就是相互无关的命令。

下面举例验证:

#for test
var=3 

all:
	echo $(var) #1
	var=4       #2
	echo $(var) #3
	echo $$(var) #4

1:输出3
2:一个独立shell定义var=4,不会影响makefile中var
3:同1,输出3
4:var在shell中为定义,所以输出空行

再看shell连起来的例子:

var=3 
target:
	echo $(var) ;\ #1
	var=4 ;\      #2
	echo $(var);\ #3
	echo $$(var) #4

1:输出3
2:一个独立shell定义var=4,不会影响makefile中var
3:输出3,虽然shell中有var,但是makefile先将echo $var扩展成echo 3,s所以还是输出3
4:makefile将其扩展成echo $var,shell中已有var,值为4

总之,在makefile中当要引用shell变量的时候,都需要使用$$var

你可能感兴趣的:(从0开始写makefile,makefile)