Make文件中赋值等号的几种类型(:=,?=,=)

本文介绍了Makefile中三种赋值方式:条件赋值(?=)、立即赋值(:=)和递归展开赋值(=)的区别。条件赋值仅当变量未赋值时才赋新值;立即赋值在赋值时展开,之后不再变化;递归赋值在使用时展开,若变量值变化,结果也会更新。通过示例展示了不同赋值方式的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天有一位以前仅做过Android APP开发的同学突然间问我,说Makefile中经常可以看见:冒号等号(:=)、问号等号(?=)和直接等号(=)。这究竟有什么区别呢?
欢迎转载,但是请注明原出处:http://blog.youkuaiyun.com/howellzhu

突然想到团队中其实有些同学以前没有做过Android整个源码树或者native代码的修改和开发,因此对Makefile有些陌生。这里简单的介绍一下三者的区别,其实非常简单:

1) ?=: 条件赋值(conditional variable assignment),如果变量已经赋值,则不要重新赋值;
2) :=: 立即赋值(immediately assignment),变量取值立即展开;
3) =: 递归展开赋值(recursively expanded assignment),该变量在使用的时候才对表达式进行展开;

对于后面的2)、3),稍微难以理解一点,但是只要我给出下面的表达式大家立即就会理解了:
VAR1 = $VAR2 + postfix
对头,区别就是如果变量的表达式中包含另外的变量如何处理。立即赋值立刻取值展开,以后VAR1和VAR2就没有关系了;递归展开赋值在后面使用VAR1的时候才真正根据VAR2的取值来计算,
如果期间VA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值