【转】Makefile中:=, =, ?=和+=的含义

本文介绍了Makefile中四种赋值操作符的含义:"="、":="、"?="和"+="。"="赋值会在整个makefile中展开,最后确定变量值;":="则表示立即赋值,根据当前位置的值;"?="若变量未定义,则赋值;"+="用于追加赋值。理解这些符号的用法对于编写Makefile至关重要。
摘要由CSDN通过智能技术生成

在Makefile语法中,时不时会见到各种“=”号的赋值语句,除了常见的“=”和“:=”,还有“?=”等

那么这些赋值等号分别表示什么含义呢?

1. “=”

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

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

    
    

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

    2. “:=”

    • 相比于前面“最普通”的”=”,”:=”就容易理解多了。”:=”就表示直接赋值,赋予当前位置的值。同样举个例子说明
    VIR_A := A
    VIR_B := $(VIR_A) B
    VIR_A := AA
    
        
        

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

      3. “?=”

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

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

        VIR := old_value
        VIR ?= new_value
            
            

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

          4. “+=”

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

          转自:【转】Makefile中:=, =, ?=和+=的含义

          评论
          添加红包

          请填写红包祝福语或标题

          红包个数最小为10个

          红包金额最低5元

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

          抵扣说明:

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

          余额充值