makefile中":="和“=”的区别
在makefile中,经常能看到这种赋值方式:
MyNumber := 123
这种方式洋名叫做expansion assignment, 翻译过来叫扩展赋值, 我一般就叫冒号等号。这位同学就问了,那么它和普通的等号有啥不一样捏?咱们废话少说,直接看代码。
ANIMAL = FROG VAR = "$(ANIMAL) DOG CAT" ANIMAL = TIGER
test:
echo $(VAR)
输出是:
TIGER DOG CAT
再来看冒号等号的输出和上面有啥不一样:
ANIMAL := FROG VAR := "$(ANIMAL) DOG CAT" ANIMAL := TIGER test: echo $(VAR)
输出时:
FROG DOG CAT
看出来哪里不一样了吗?
没错,直接使用"=",变量在调用的时候一起展开,也就是在执行"echo $(VAR)"的时候;但是使用":="的时候,变量在赋值的时候就展开了。