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是被定义了具体值的,

在这里插入图片描述

发布了192 篇原创文章 · 获赞 100 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/LinuxArmbiggod/article/details/103648115