Makefile 中 = := ?= 的区别

  = 递归展开,变量会原封不动的存储字符序列,知道被引用的时候再展开。
:= 简单展开,在变量赋值的时候就展开,后续修改对它赋值时引用的变量不影响它的值。
?= 如果变量原先没有赋值,则递归展开,否则不变。 这个应该比较常出现在判断变量是否已经在环境变量中被定义的情况。

如下Makefile

STR = "INIT"
STR2 = "INIT"
STR3 = "INIT"

NAME = "First"
STR = $(NAME)
STR2 := $(NAME)
STR3 ?= $(NAME)
STR4 ?= $(NAME)

NAME = "Second"

ALL:
        @echo $(STR)
        @echo $(STR2)
        @echo $(STR3)
        @echo $(STR4)

Make的输出结果是:

Second
First
INIT
Second

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值