makefile各种赋值(?= := = +=)

在makefile中有各种赋值:= := ?= +=,接下里将会对4种赋值做以区分。
递归展开变量(=)
延时变量,只有被使用时才展开定义。
用=或defin关键字都可以定义这种变量,如果变量的定义引用了其他的变量,
那么引用会一直展开下去,直至找到被引用的变量的最新的定义,并以此作为该变量的值。但是有时候会陷入无穷递归。

a=I love
b=$a
a=linux
test:
        echo $a $b
        
# a是linux,b是linux

立即变量(:=)
定义时的赋值立即生效。
用:=这种方式定义的变量,会在变量的定义点,按照被引用的变量的当前值进行展开。

a=I love
b:=$(a)    #用$使之成为变量,而不是字符串
a=linux
test:
        echo $a $b
#a是linux ,而b是I love

条件变量?=
当变量为空时才赋值。
赋默认值:如果没有初始化该变量,则给它赋值;如果该变量已初始化,则赋默认值无效。

a=4
a?=3
test:
        echo $a
#a是4
a=4
a=3
test:
        echo $a
# a是3

追加赋值(+=)
为已定义的变量添加新的值。当变量没有被定义过,+=和=是一样的,它定义一个递归展开的变量,但是,当变量已经有定义的时候,
+=只是简单的进行字符的添加工作。

a =I love
a += linux
test:
        echo $a

#a是I love linux

如果起初用:=定义变量,那么+=只是利用变量的当前值进行添加;

a :=I love
a += linux
#a=hhh
test:
        echo $a

#a是I love linux

如果起初用=定义变量,它并不会在+=的地方马上进程变量展开,
而是会把展开工作推后,直至它找到最后变量的定义,
这和=定义变量的行为类似。

a :=I love  #或者a=I love
a += linux
a=happy
test:
        echo $a
#a是happy

注:在makefil中注释用#

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值