第8课 - 条件判断语句

第8课 - 条件判断语句

1. makefile中的条件判断语句

  (1)makefile 中支持条件判断语句

    — 可以根据条件的值来决定 make 的执行

    — 可以比较 两个不同变量 或者 变量和常量值 方法 

      ifxxx  (arg1,arg2)

      # for true

      else

      # for false

      endif

  (2)注意事项:条件判断语句只能用于控制 make 实际执行的语句 ; 但是不能控制规则中命令的执行过程。

2. 条件判断语句的语法

  (1)常用形式

    ifxxx   (arg1,arg2)

  (2)其它合法形式

    ifxxx   "arg1"  "arg2"

      ifxxx   'arg1'   'arg2'

    ifxxx   "arg1"   'arg2'

    ifxxx   'arg1'   "arg2" 

  (3)小贴士(注意条件判断语句的格式)

       

3. 条件判断关键字

    

 1 .PHONY : test
 2 
 3 var1 := A
 4 var2 := $(var1)
 5 var3 :=
 6 
 7 test:
 8     ifeq ($(var1),$(var2)) 
 9         @echo "var1 == var2"
10     else
11         @echo "var1 != var2"
12     endif
13     
14     ifneq ($(var2),)
15         @echo "var2 is NOT empty"    
16     else
17         @echo "var2 is empty"    
18     endif
19     
20     ifdef var2
21         @echo "var2 is NOT empty"    
22     else
23         @echo "var2 is empty"    
24     endif
25     
26     ifndef var3
27         @echo "var3 is empty"    
28     else
29         @echo "var3 is NOT empty"    
30     endif

4. 一些工程经验

  (1)条件判断语句之前可以有空格,但是不能有 Tab 字符('\t'

  (2)在条件判断语句中不要使用自动变量($@ , $^ , $<)

  (3)一条完整的条件语句必须位于同一个 makefile 中

  (4)条件判断类似C语言中的宏,预处理阶段有效,执行阶段无效

  (5)make 在加载 makefile 时

      • 首先计算表达式的值(赋值方式不同,计算方式不同
      • 根据判断语句的表达式决定执行的内容    
 1 .PHONY : test
 2 # 赋值方式不同,计算方式不同
 3 var1 :=
 4 var2 := $(var1)
 5 
 6 var3 =
 7 var4 = $(var3)  # 由于是递归赋值,因此不能确定变量的值,默认为def
 8 
 9 #var3 = 3 
10 
11 test:
12     ifdef var1 
13         @echo "var1 is defined"
14     else
15         @echo "var1 is NOT defined"
16     endif
17     
18     ifdef var2
19         @echo "var2 is defined"    
20     else
21         @echo "var2 is NOT defined"    
22     endif
23     
24     ifdef var3 
25         @echo "var3 is defined"
26     else
27         @echo "var3 is NOT defined"
28     endif
29     
30     ifdef var4
31         @echo "var4 is defined"    
32     else
33         @echo "var4 is NOT defined"    
34     endif
35  
36 #输出结果
37 var1 is NOT defined
38 var2 is NOT defined
39 var3 is NOT defined
40 var4 is defined

 

注:本文整理于《狄泰12月提升计划》课程内容

狄泰QQ群:199546072

posted @ 2017-05-11 15:42  Hengs  阅读(253)  评论(0编辑  收藏  举报