关键词:makefile中条件判断语句
1. makefile中条件判断语句
- 可以根据条件的值来决定make的执行
- 可以比较两个不同变量或者变量和常量值
Note:
条件判断语句只能用于控制make实际执行的语言,但是不能控制规则中命令的执行过程。
-
条件判断语句的语法说明
-
条件判断关键字
.PHONY : test
var1 := A
var2 := $(var1)
var3 :=
test :
ifeq ($(var1),$(var2)) # 注意:在ifeq 前面不能使用\tab键,而是使用空格键
@echo "var1 == var2"
else
@echo "var1 != var2"
endif
ifneq ($(var1),$(var2))
@echo "var1 != var2"
else
@echo "var1 == var2"
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
输出结果:
$ make
var1 == var2
var1 == var2
var2 is NOT empty
var3 is empty
2. 工程经验
- 条件判断语句之间可以有空格,但不能有Tab字符(
\t
) - 在条件语言中不能使用自动变量(
$@
,@^
,$<
) - 一条完整的条件语句必须位于同一个makefile中
- 条件判断类似C语言中的宏,预处理阶段有效,执行阶段无效
- make在加载makefile时:首先计算表达式的值(赋值方式不同,计算方式不同),然后根据判断语句的表达式决定执行的内容
问题:下面代码的输出相同吗?
.PHONY : test
var1 :=
var2 := $(var1)
var3 =
var4 = $(var3)
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
输出结果:
$ make test
var1 is empty
var2 is empty
var3 is empty
var4 is NOT empty
总结:var3和var4是通过递归赋值,var4的值不能在预处理阶段判断值是否存在,需要在执行时才能判断var4的值,编译器将在预处理阶段不能判断是否为空的值设置为不为空,条件判断语句是在预处理阶段有效,因此var4的值不为空。
3. 小结
- 条件判断根据条件的值来决定make的执行
- 条件判断可以比较两个不同变量或者变量和常量值
- 条件判断在预处理阶段有效,执行阶段无效
- 条件判断不能控制规则中命令的执行过程
声明:此文章为本人在学习狄泰软件学院《十二月提升计划》所做的笔记,参考书籍《专业嵌入式软件开发》——李云,文章中包含狄泰软件资料内容和《专业嵌入式软件开发》资料内容,一切版权归狄泰软件和《专业嵌入式软件开发》所有!