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