Makefile 中:= ?= += =的区别

来源:互联网 发布:电脑桌面优化软件 编辑:程序博客网 时间:2024/06/03 23:46


经常有人分不清= 、:=和+=的区别  这里我总结下做下详细的分析:

首先你得清楚makefile的运行环境,因为我是linux系统,那么我得运行环境是shell

在Linux的shell里,shell只认识字符串,所以你就不要说整形什么的了。说值也不贴切。

1。 先看+=是什么意思?

        因为shell只认识字符串,所以这里应该不难联想到+=就是字符串连接的意思。相当于c语言的 strcat。

       举个例子:

        x本来是  U;

        x +=SB;

        那么运行结果就是  x为USB;

2.    再看?=是什么意思?

        ?=是条件赋值

         比如:

          foo ?= $(bar)
          只有当foo变量还没有被定义的时候,才会将bar的值赋给foo。 注意,如果foo已经被定义过,但是是空值了话,?=不会给他赋值。比方说你的makefile是
          foo = hello
          foo ?= new
          则最终foo的值是hello
          如果你的makefile是
          foo =
          foo ?= new
          foo的值是空

3。   接着理解:=和=

          看下面的例子:

         x = sb;

        y =u$(x) 

         x = all

        运行结果x 是all    y是uall

        将=改成:=

        x := sb;

         y :=u$(x) 

         x := all

         运行结果x是all y是usb

         怎么样?有感觉了吧。这里=的话算$(x)的时候会一直搜索到文件最后,最后再赋值。

          而:=则不会搜索后面的x值。也就是前面的是有效的而引用变量之后的就是无效的。

原创粉丝点击