• Makefile文件里的赋值方法(第三节)


    时间是我们唯一拥有的东西了,利用时间,发挥光芒。——张顺

    什么是赋值

    常见赋值:(实例1.1)

    #include 
    
    int main()
    {
    	int a,b;		//定义一个变量a和b
    	a = 10;		//将变量a赋值为10
    	b = 20;		//将变量b赋值20
    	a = b;		//再将b的值赋值a
    	printf("%d\n",a);	//打印变量a
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    结果是20。

    这是c语言中简单的赋值,但是在Makefile中如何实现赋值呢,他赋值还是使用的“=”号吗,还是有其他的更多的符号提供使用。一起进入这“该死”的Makefile中学习吧

    Makefile当中的赋值

    赋值符号

    Makefile当中的赋值符号:

    =  延时变量,只有被使用时才展开定义
    := 立即变量,定义时的赋值立即有效
    ?= 条件变量,当变量为空时才赋值
    += 追加赋值,将一个变量的值追加到另一个变量的后面
    
    • 1
    • 2
    • 3
    • 4

    =延时赋值(不要觉得简单就跳过,和你平时学的不一样)

    核心概念:只有被使用时才展开定义

    A=123  #将123“延时赋值”给A
    B=$(A)	#将A的值“延时赋值”给B
    
    print:
            @echo $(B)		#打印B
    
    • 1
    • 2
    • 3
    • 4
    • 5

    依次剖析上面几句的意思:

    上面是“=”符号的单独使用,注意第一句A=123此时并没有真正意义的赋值给A,什么时候才真正给A赋值了呢?那就是使用变量A的时候才真正进行了意义上的赋值

    那么接着看第二句B=$(A),在第二句当中,也是一个延时赋值给B,这就导致$(A)看起来是被使用了其实并没有被使用,他在等待B真正赋值的时候才会使用A,于是乎B也在等待被使用,什么时候才使用,也就是下面的@echo $(B)语句。

    这条语句导致打印B里面的值,致使B被使用 ,那么此时第二条语句延时赋值的条件达成就变成了真正意义的赋值,致使A变量被使用,又回到第一句进行真正意义的赋值,这就是你为什么可以在输出结果可以看到是123

    没想到吧,一个从开始学编程的等于号都这么绕,成热打铁
    加大难度来一次练习题:(可以先不看结果,猜一猜结果是什么)

    A=123  #将123赋值给A
    B=$(A)  #将A的值给B
    A=456
    C=$(A)
    
    
    print:
            @echo "B="$(B)          #打印B
            @echo "C="$(C)          #打印C
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    答案(下面字体为白色,选中可以查看答案):

    最后出输:
    B=456
    C=456
    猜对了吗?

    小贴士:事实上延时赋值也是取得最后一次赋值,也就是延时赋值也会被覆盖,新的会把旧的给干掉,无论在哪里只要我是新的。

    :=立即赋值

    核心概念:定义时的赋值立即有效

    立即赋值?这次怎么觉得立即赋值这几个字有点舒服呢。肯定不用像第一个延时赋值那样麻烦,哈哈,没错他就是咱们普通学习的赋值这里只是样子被改变了。

    将上一道练习题直接改变符号,看看结果:

    A:=123  #将123赋值给A
    B:=$(A) #将A的值给B
    A:=456
    C:=$(A)
    
    
    print:
            @echo "B="$(B)          #打印B
            @echo "C="$(C)          #打印C
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    结果:
    在这里插入图片描述
    显而易见不是吗

    ?=条件赋值

    核心概念:当变量为空时才赋值
    看字面意思应该是带点判断的感觉,马上实操看看情况。

    以下实例:

    B?=123
    B?=456
    
    C?=$(B)
    
    
    print:
            @echo "B="$(B)          #打印B
            @echo "C="$(C)          #打印C
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    输出结果为:

    B=123
    C=123
    
    • 1
    • 2

    结合概念,我想也很容易理解,还是稍作解释
    第一句由于第一次给B赋值,理所当然赋值成功,第二句,变量B由于第一次的赋值已经不是空,所以根据概念,当变量为空才进行赋值,第二次赋值忽略,所以导致输出为123,而不是456.

    +=追加赋值

    核心概念:将一个变量的值追加到另一个变量的后面

    追加赋值通常用于字符串

    # 定义一个空变量
    VAR := 
    # 将字符串追加到变量VAR后面
    VAR += Hello
    # 将另一个字符串追加到变量VAR后面
    VAR += World
    # 打印变量VAR的值
    echo $(VAR)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    输出结果为:

    HelloWorld
    
    • 1

    在这个例子中,我们首先定义了一个空变量VAR。然后,我们使用VAR += Hello将字符串Hello追加到VAR的末尾。接下来,我们使用相同的语法将另一个字符串World追加到VAR的末尾。最后,我们使用echo命令打印变量VAR的值,得到了追加后的字符串HelloWorld。

    结束

    持续更新中……,有问题随时发表评论,一起讨论解决。

  • 相关阅读:
    SQL优化复习
    亚马逊鲲鹏系统优势有哪些
    routeDone with a webviewId 26 that is not the current page在uniapp运行过程中出现的报错
    课程表系列
    SpringCloud OpenFeign 服务调用传递 token
    MySQL之JDBC及常见错误
    【C语言】实用调试技巧
    11.8 实现重置文件时间戳
    UNET 3+: A FULL-SCALE CONNECTED UNETFOR MEDICAL IMAGE SEGMENTATION
    scp报错not a regular file - 猫头虎博主为您深入解析
  • 原文地址:https://blog.csdn.net/qq_52749711/article/details/133555591