Makefile中=与:=的区别

本文通过几个实例详细介绍了Makefile中的变量定义方式及其解析过程。包括不同赋值方式的影响、变量查找顺序以及如何正确使用变量等内容。

先看下面的Makefile:

    #example
    B := $(A)
    A = later
    all:
        @echo $(B)

 执行make命令,我们发现什么都没输出,我们将第2行的:=换成=


    #example
    B = $(A)
    A = later
    all:
        @echo $(B)

执行make,输出later。
分析:B :=$(A)时,它只会到这句语句之前去找A的值,因A没有定义所以什么都没有输出。
      B = $(A)时,虽然该语句之前A没有定义,但是在其后定义了,所以能输出later


    #example
    A = before1
    A = before2
    B := $(A)
    A = later1
    all:
        @echo $(B)

执行make,输出before2。解释:上面Makefile最后一句echo前面的@符号的作用是禁止回显。如我们的Makefile改为如下

    #example
    A = before1
    B = $(A)
    B = before2
    C = $(B)
    A = later1
    B = later2
    all:
        echo $(C)

执行make:
echo later2
later2
分析:C = $(B),应该从Makefile文件最后往前找B,得到B = later2,将最后一句全部变量代替即为:echo later2,因echo前没有@符号,回显该语句,然后再输出later2。
注意:当我们直接在终端上要用echo输出某个变量的值时,是不能加()的。如我们要输出PAHT
应该用echo $PATH,而不能用echo $(PATH),否则会报错,注意'$'不能少了。
Makefile中"?=",含义为:如没定义,则赋值。
如:TEMP ?= var 等价于
    ifeq($(TEMP),undefined)
    TEMP = var
    endif

在变量名称之前冠上

$符号

,表示shell应该将展开成其变量值


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值