文章目录
- makefile 中支持条件判断语句。
- 可以根据条件的值决定 make 的执行。
- 可以
比较
两个不同变量或者变量和常量值。
条件判断语句只能用于控制 make 实际执行的语句;但是,不能控制规则中命令的执行过程。
- 常用形式:
if xxx (arg1,arg2) - 其他合法格式:
if xxx “arg1” “arg2”
if xxx ‘arg1’ ‘arg2’
if xxx “arg1” ‘arg2’
if xxx ‘arg1’ “arg2”
注意:
中间不可以有空格。
- ifeq : 判断参数
是否相等
,相等为 true, 否则是 false. - ifndef : 判断参数
是否不等
,不等为 true, 否则为 false.
ifeq (arg1,arg2) # 如果 arg1 等于 arg2,则执行这里的命令else # 否则执行这里的命令endififneq (arg1,arg2) # 如果 arg1 不等于 arg2,则执行这里的命令else # 否则执行这里的命令endif
- ifdef : 判断参数
是否有值
,有值为 true, 否则是 false. - ifndef : 判断参数
是否没有值
,没有值为 true, 否则为 false.
ifdef variable # 如果 variable 被定义,则执行这里的命令else # 否则执行这里的命令endif
代码讲解:
.PHONY : testvar1 := Avar2 := $(var1) # 将var1 赋值给 var2var3 := # var3 为空test :ifeq ($(var1),$(var2))# 判断var1 和var2 是否相等@echo "var1 == var2"else@echo "var1 != var2"endififdef var3# 判断var3 是否为空@echo "var3 is NOT empty"else@echo "var3 is empty"endif
注意:
- 条件判断语句之前可以有空格, 但不能有 Tab 字符
(' \ t ')
. - 在条件语句中
不要使用自动变量
。($@, $^, $<) - 一条完整的条件语句必须位于同一个 makefile 中。
提问 :
下面这两段代码的执行结果相同吗?
实践出真知,下面就来实际实现一下:
.PHONY : testvar1 := var2 := $(var1)# 对 var2 进行简单赋值 var3 =var4 = $(var3)# 对 var3 进行递归赋值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
结果是不同的,这是由于我们的 条件判断类似于 C 语言中的宏,预处理阶段有效,执行阶段无效。
:= 简单赋值 和 = 递归赋值 是不同的。简单赋值会发生在 Makefile 解析的过程中。简单赋值会发生在 Makefile 解析的过程中
下一篇介绍 函数的定义于调用。
来源地址:https://blog.csdn.net/wuyiyu_/article/details/130617102