捌-《条件判断语句》

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 的执行
  • 条件判断能够比拟两个不同变量或者变量和常量值
  • 条件判断在预处理阶段无效,执行阶段有效
  • 条件判断不能管制命令规定中的执行过程