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


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

首先你得清楚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值。也就是前面的是有效的而引用变量之后的就是无效的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值