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)"的时候;但是使用":="的时候,变量在赋值的时候就展开了。 

 

posted @ 2013-06-28 22:21  马瑞鑫  阅读(2500)  评论(0编辑  收藏  举报