Makefile中四种赋值=,:=,?=,+=

1、“=”
“=”是最普通的等号,然而在Makefile中确实是最容易搞错的赋值等号。使用”=”进行赋值,变量的值是整个makefile中最后被指定的值。不太容易理解,举个例子如下:

VIR_A = A
VIR_B = $(VIR_A) B
VIR_A = AA

   
   
  • 1
  • 2
  • 3

经过上面的赋值后,最后VIR_B的值是AAB,而不是AB。在make时,会把整个makefile展开,拉通决定变量的值

2、 “:=”
”:=”就表示直接赋值,赋予当前位置的值。举个例子说明:

VIR_A := A
VIR_B := $(VIR_A) B
VIR_A := AA

   
   
  • 1
  • 2
  • 3

最后,变量VIR_B的值是AB,即根据当前位置进行赋值。因此相比于”=”,”:=”才是真正意义上的直接赋值。

3、 “?=”
“?=”表示如果该变量没有被赋值,则赋予等号后的值。举例:

VIR ?= new_value

   
   
  • 1

如果VIR在之前没有被赋值,那么现在VIR的值就为new_value

VIR := old_value
VIR ?= new_value

   
   
  • 1
  • 2

这种情况下,VIR的值就是old_value

4、 “+=”
“+=”和平时写代码的理解是一样的,表示将等号后面的值添加到前面的变量上

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Makefile,=是最普通的等号赋值符号,它的作用是将右侧的值赋给左侧的变量。例如,变量A=1,表示将1赋值给变量A。 ?=是条件赋值符号,它的作用是只有在变量未定义时才进行赋值。例如,如果变量A未定义,A?=1,那么A的值就是1;如果A已经定义了,那么A?=1就不会起作用,A的值保持不变。 :=是简单赋值符号,它的特点是变量的值决定于它在Makefile的位置,而不是整个Makefile展开后的最终值。这意味着,如果在使用:=进行赋值时,变量的右侧包含了其他变量的引用,那么这些变量的值将在赋值时被解析并赋给左侧的变量。 总结一下: - =是最普通的等号赋值符号,将右侧的值赋给左侧的变量。 - ?=是条件赋值符号,只有在变量未定义时才进行赋值。 - :=是简单赋值符号,变量的值决定于它在Makefile的位置,而不是整个Makefile展开后的最终值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Makefile := ?= += =的区别](https://blog.csdn.net/chenzhen1080/article/details/107135390)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Makefile = := ?= += 的使用及区别](https://blog.csdn.net/shenfengchen/article/details/110792431)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值