第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)条件判断不能控制规则中命令的执行过程