Makefile8--条件判断语句

学习自狄泰软件学院唐佐临老师Makefile课程,文章中图片取自老师的PPT,仅用于个人笔记。


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实验1 :ifneq 比较两个变量是否相等,makefile 中 命令前可以用 Tab 键,但是条件判断语句前不允许用 Tab键!!!只能用空格键!!!!

.PHONY : test

var1 := A
var2 := $(var1)

# makefile 允许定义空值变量
var3 :=

test:
	#注意  ifeq ($(var1),$(var2))  不是命令,是条件判断语句,makefile 中 命令前可以用 Tab 键,但是条件判断语句前不允许用 Tab键!!!只能用空格!!!!
    ifeq ($(var1),$(var2)) 
		#可执行命令 前面可以用Tab键
		@echo "var1 == var2"
    else
		@echo "var1 != var2"
    endif
    

mhr@ubuntu:~/work/makefile1$ 
mhr@ubuntu:~/work/makefile1$ make
var1 == var2
mhr@ubuntu:~/work/makefile1$ 

实验2:ifneq 比较变量和一个空参数即常量空值,makefile 中 命令前可以用 Tab 键,但是条件判断语句前不允许用 Tab键!!!只能用空格键!!!!

.PHONY : test

var1 := A
var2 := $(var1)
var3 :=

test:
	#比较变量和一个空参数即常量空值
    ifneq ($(var2),)
		@echo "var2 is NOT empty"    
    else
		@echo "var2 is empty"    
    endif
	

mhr@ubuntu:~/work/makefile1$ 
mhr@ubuntu:~/work/makefile1$ make
var2 is NOT empty
mhr@ubuntu:~/work/makefile1$ 

实验3
ifdef 判断 变量是否有值
ifndef 判断 变量是否为空值

.PHONY : test

var1 := A
var2 := $(var1)
var3 :=

test:
    
    #判断 var2是否定义了值
    ifdef var2
		@echo "var2 is NOT empty"    
    else
		@echo "var2 is empty"    
    endif
    
      #判断 var2是否定义了值
    ifndef var3
		@echo "var3 is empty"    
    else
		@echo "var3 is NOT empty"    
    endif

mhr@ubuntu:~/work/makefile1$ 
mhr@ubuntu:~/work/makefile1$ make
var2 is NOT empty
var3 is empty
mhr@ubuntu:~/work/makefile1$ 
mhr@ubuntu:~/work/makefile1$

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
实验4

.PHONY : test

#变量的普通赋值
var1 :=
var2 := $(var1)

#变量的递归赋值,make解释器在预处理即加载makefile 的时候,
var3 =
var4 = $(var3)

#var3 = 3 

test:
    ifdef var1 
		@echo "var1 is defined"
    else
		@echo "var1 is NOT defined"
    endif
    
    ifdef var2
		@echo "var2 is defined"    
    else
		@echo "var2 is NOT defined"    
    endif
    
    ifdef var3 
		@echo "var3 is defined"
    else
		@echo "var3 is NOT defined"
    endif
    
    ifdef var4
		@echo "var4 is defined"    
    else
		@echo "var4 is NOT defined"    
    endif

mhr@ubuntu:~/work/makefile1$ make
var1 is NOT defined
var2 is NOT defined
var3 is NOT defined
var4 is defined
mhr@ubuntu:~/work/makefile1$ 

打印结果很奇怪 var1 2 都正确的识别到了是空值 是未定义的,var3也是别到了是未定义的,但是 var4却没有被识别到时空值,明明是被 var3递归赋值的啊,应该和var3一样才对啊。答案是这样的,var3 var4采用的是递归赋值的方式,这意味着make解释器在加载makefile 的时候,根本就不能判断出 var4的值应该是什么,make 解释器只知道 var3是没有值的,但是他无法判断var4是不是有值的,要等到执行这个makefile的时候才知道,make解释器认为 在递归赋值的情况之下, var4 = $(var3) 这样写,var4是被定义了具体值的,

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ma浩然

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

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

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

打赏作者

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

抵扣说明:

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

余额充值