捌-《条件判断语句》
makefile 中反对条件判断语句
- 能够依据条件的值来决定 make 的执行
- 能够比拟两个不同变量或者变量和常量值
ifxxx(arg1,arg2)#for tureelse#for falseendif
注意事项
条件判断语句只能用于管制 make 理论执行的语句,然而不能管制规定中命令的执行过程
条件判断语句的语法阐明
- 罕用模式
ifxxx(arg1,arg2)
- 其它非法模式
ifxxx "arg1""arg2"ifxxx 'arg1''arg2'ifxxx "arg1"'agr2'ifxxx 'arg1'"arg2"
小贴士
条件判断关键字
编程试验1
.PHONY : testvar1 := Avar2 := $(var1)var3 := test : ifeq ($(var1),$(var2)) @echo "var1 == var2" else @echo "var1 != var2" endif ifeq ($(var2),$(var3)) @echo "var2 == var3" else @echo "var2 != var3" endif ifdef var3 @echo "var3 is NOT empty" else @echo "var3 is empty" endif
zhabin666@ubuntu:/mnt/hgfs/Fileshare_LinuxC$ make// 输入 var1 == var2var2 != var3var3 is empty
这里格局要留神,不然会报相似这样的谬误
zhabin666@ubuntu:/mnt/hgfs/Fileshare_LinuxC$ makemakefile:24: *** extraneous 'else'. Stop.
一些工程教训1
- 条件判断语句之前能够有空格,然而不能有 Tab('t')
- 在条件语句中不要应用主动变量($@, $^,$<)
- 一条残缺的条件语句必须位于同一个 makefile 中
一些工程教训2
- 条件判断相似 C 语言中的宏,预处理阶段无效,执行阶段有效
make 在加载 makefile 时
- 首先计算表达式的值(赋值形式不同,计算形式不同)
- 依据判断语句的示意式决定执行的内容
编程试验2.1
.PHONY : testvar1 := var2 := $(var1)var3 = var4 = $(var3) # makefile 预处理阶段是无奈通晓 var4 是否有值,就认为有值了test : ifdef var1 @echo "var1 is NOT empty" else @echo "var1 is empty" endif ifdef var2 @echo "var2 is NOT empty" else @echo "var2 is empty" endif ifdef var3 @echo "var3 is NOT empty" else @echo "var3 is empty" endif ifdef var4 @echo "var4 is NOT empty" else @echo "var4 is empty" endif
zhabin666@ubuntu:/mnt/hgfs/Fileshare_LinuxC$ make// 输入 var1 is emptyvar2 is emptyvar3 is emptyvar4 is NOT empty
编程试验2.2
.PHONY : testvar1 := var2 := $(var1)var3 = var4 = $(var3) # makefile 预处理阶段是无奈通晓 var4 是否有值,就认为有值了var3 = 3test : ifdef var1 @echo "var1 is NOT empty" else @echo "var1 is empty" endif ifdef var2 @echo "var2 is NOT empty" else @echo "var2 is empty" endif ifdef var3 @echo "var3 is NOT empty" else @echo "var3 is empty" endif ifdef var4 @echo "var4 is NOT empty" else @echo "var4 is empty" endif
zhabin666@ubuntu:/mnt/hgfs/Fileshare_LinuxC$ make// 输入 var1 is emptyvar2 is emptyvar3 is NOT emptyvar4 is NOT empty
小结
- 条件判断依据条件的值来决定 make 的执行
- 条件判断能够比拟两个不同变量或者变量和常量值
- 条件判断在预处理阶段无效,执行阶段有效
- 条件判断不能管制命令规定中的执行过程