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

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

什么是赋值

常见赋值:(实例1.1)

#include <stdio.h>

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;
}

结果是20。

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

Makefile当中的赋值

赋值符号

Makefile当中的赋值符号:

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

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

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

A=123  #将123“延时赋值”给A
B=$(A)	#将A的值“延时赋值”给B

print:
        @echo $(B)		#打印B

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

上面是“=”符号的单独使用,注意第一句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

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

最后出输:
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

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

?=条件赋值

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

以下实例:

B?=123
B?=456

C?=$(B)


print:
        @echo "B="$(B)          #打印B
        @echo "C="$(C)          #打印C

输出结果为:

B=123
C=123

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

+=追加赋值

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

追加赋值通常用于字符串

# 定义一个空变量
VAR := 
# 将字符串追加到变量VAR后面
VAR += Hello
# 将另一个字符串追加到变量VAR后面
VAR += World
# 打印变量VAR的值
echo $(VAR)

输出结果为:

HelloWorld

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

结束

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Strange_Head

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值