zoukankan      html  css  js  c++  java
  • Makefile中=与:=的区别

    先看下面的Makefile:

    1. #example
    2. B := $(A)
    3. A = later
    4. all:
    5.     @echo $(B)
     执行make命令,我们发现什么都没输出,我们将第3行的:=换成=。

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

    1. #example
    2. A = before1
    3. A = before2
    4. B := $(A)
    5. A = later1
    6. all:
    7.     @echo $(B)
    执行make,输出before2。
    解释:上面Makefile最后一句echo前面的@符号的作用是禁止回显。如我们的Makefile改为如下:

    1. #example
    2. A = before1
    3. B = $(A)
    4. B = before2
    5. C = $(B)
    6. A = later1
    7. B = later2
    8. all:
    9.     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


    转自:http://blog.chinaunix.net/uid-26404201-id-3334234.html
  • 相关阅读:
    青云黄允松:2016年是云计算市场最关键的一年
    知道创宇CTO杨冀龙:网络安全人才决定行业格局
    su 与 su
    如何进入单用户模式(CentOS6.9)
    在虚拟机中还原GHO镜像系统
    安装CentOS 7 文字版
    把typora改为微软雅黑+Consolas
    使用python操作文件实现购物车程序
    使用python操作json文本文件
    资源下载网址集合
  • 原文地址:https://www.cnblogs.com/slz-coder150315/p/4376399.html
Copyright © 2011-2022 走看看