第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. 条件判断关键字

    

编程实验:

.PHONY : test

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

test:
    ifeq ($(var1),$(var2)) 
        @echo "var1 == var2"
    else
        @echo "var1 != var2"
    endif
    
    ifneq ($(var2),)
        @echo "var2 is NOT empty"    
    else
        @echo "var2 is empty"    
    endif
    
    ifdef var2
        @echo "var2 is NOT empty"    
    else
        @echo "var2 is empty"    
    endif
    
    ifndef var3
        @echo "var3 is empty"    
    else
        @echo "var3 is NOT empty"    
    endif

 运行结果:

  

 

 

 

 

4. 一些工程经验

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

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

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

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

(5)make 加载 makefile

  • 首先计算表达式的值(赋值方式不同,计算方式不同

  • 根据判断语句的表达式决定执行的内容

 

      

 

 

 

编程实验:

.PHONY : test

var1 :=
var2 := $(var1)

var3 =
var4 = $(var3)    # 由于是递归赋值,因此不能确定变量的值,默认为def

#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
 

 

运行结果:

  

 

 

 

 

5. 小结

(1)条件判断根据条件的值来决定 make 的执行

(2)条件判断可以比较 两个不同变量 或者 变量和常量值 

(3)条件判断预处理阶段有效,执行阶段无效

(4)条件判断不能控制规则中命令的执行过程

 

posted @ 2018-07-08 22:02  梦心之魂  阅读(269)  评论(0编辑  收藏  举报