第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 字符(' ')
(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