• Makefile中诸多等号“:=, =, ?=和+=”的区别


    Makefile语法中,时不时会见到各种“=”号的赋值语句,除了常见的“=”和“:=”,还有“?=”等,那么这些赋值等号分别表示什么含义呢?

    1. “=”

    “=”是最普通的等号,然而在Makefile中确实最容易搞错的赋值等号,使用”=”进行赋值,变量的值是整个makefile中最后被指定的值

    举个例子如下:

    1. VIR_A = A
    2. VIR_B = $(VIR_A) B
    3. VIR_A = AA

    经过上面的赋值后,最后VIR_B的值是AA B,而不是A B。在make时,会把整个makefile展开,针对用“=”设定的值,找到最后赋予的那个,然后直接使用它,或者间接使用它给其他变量赋值。 "="寻找的是变量最终的值。

    2. “:=”

    相比于前面“最普通”的”=”,”:=”就容易理解多了。”:=”就表示直接赋值,赋予当前位置的值,不考虑后面是否又进行了“=”或“?=”赋值。举个例子说明:

    1. VIR_A := A
    2. VIR_B := $(VIR_A) B
    3. VIR_A := AA

    最后变量VIR_B的值是A B,即根据当前位置进行赋值。因此相比于”=”,”:=”才是真正意义上的直接赋值。":="的作用域取决于 当前变量解析时所处的位置替换,并不去最终的值。

    3. “?=”

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

    VIR ?= new_value

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

    1. VIR := old_value
    2. VIR ?= new_value

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

    4. “+=”

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

  • 相关阅读:
    分布式数据库-架构真题(二十六)
    Python终端输出彩色样式的内容
    linux常用三剑客
    走廊上的相机安装及调试方法
    linux的常见命令
    服务器管理
    2022河南萌新联赛第(二)场:河南理工大学 I - 22数
    AutoCAD 2022安装及激活
    统信UOS离线安装nginx
    NOI2022游记,未曾设想的道路
  • 原文地址:https://blog.csdn.net/jinking01/article/details/132911949