zoukankan      html  css  js  c++  java
  • Makefile中:=, =, ?=和+=的含义

    本文转载自:https://blog.csdn.net/b876144622/article/details/80372161

    在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. “+=”

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

  • 相关阅读:
    分布式锁获取token
    美团-2019Q2述职总结
    linux df 日志删除命令分析
    MySQL、HBase、ES的特点和区别
    C++函数返回局部变量
    C语言 数组初始化的三种常用方法({0}, memset, for循环赋值)以及原理
    C Mysql API连接Mysql
    C++运算符重载
    C++对象赋值的四种方式
    C/C++下scanf的%匹配以及过滤字符串问题
  • 原文地址:https://www.cnblogs.com/thoughtInShare/p/14088898.html
Copyright © 2011-2022 走看看