Makefile中赋值符号=, :=, ?=, +=的区别

1、举例调试

ifdef DEFINE_VAR
    VAR = 1
endif

ifeq ($(OPT), define)
    VAR ?= 2
endif

ifeq ($(OPT), add)
    VAR += 3
endif

ifeq ($(OPT), recover)
    VAR := 4
endif

all:
 @echo "    VAR = $(VAR)"

 

调试结果如下:

$ make DEFINE_VAR=true
    VAR = 1
$ make OPT=define
    VAR = 2
$ make OPT=add
    VAR = 3
$ make OPT=recover
    VAR = 4
$ make DEFINE_VAR=true OPT=define
    VAR = 1
$ make DEFINE_VAR=true OPT=add
    VAR = 1 3
$ make DEFINE_VAR=true OPT=recover
    VAR = 4


结果分析:

    由前四条命令可以知道,都可以赋值(其实是废话)。

    make DEFINE_VAR=true OPT=define命令说明,如果被赋值过,?=赋值不生效;
    make DEFINE_VAR=true OPT=add命令说明,+=是在之前赋值的基础上追加赋值
    make DEFINE_VAR=true OPT=recover命令说明,:=是覆盖之前的赋值


2、结论

        =   是最基本的赋值
        :=  是覆盖之前的值
        ?= 是如果没有被赋值过就赋予等号后面的值
        += 是添加等号后面的值

 

3、举例分析 = 和 := 的区别

    举例如下

ifdef DEFINE_VAR
    TMP = 1
    VAR = $(TMP)
    TMP = 2
else
    TMP := 3
    VAR := $(TMP)
    TMP := 4
endif

all:
 @echo "    VAR = $(VAR)"


调试结果如下:

$ make DEFINE_VAR=true
    VAR = 2
$ make
    VAR = 3

 

结果分析:

    make DEFINE_VAR=true命令说明,=的赋值不在于位置,而是最后赋值的值;
    make命令说明,:=的赋值是按顺序解析的。

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值