文章目录
- 前言
- 一、条件判断语句的语法说明
- 二、ifeq / ifneq
- 三、ifdef / ifndef
- 代码讲解:
- 四、经典示例
- 总结
前言
一、条件判断语句的语法说明
- makefile 中支持条件判断语句。
- 可以根据条件的值决定 make 的执行。
- 可以
比较
两个不同变量或者变量和常量值。
条件判断语句只能用于控制 make 实际执行的语句;但是,不能控制规则中命令的执行过程。
- 常用形式:
if xxx (arg1,arg2) - 其他合法格式:
if xxx “arg1” “arg2”
if xxx ‘arg1’ ‘arg2’
if xxx “arg1” ‘arg2’
if xxx ‘arg1’ “arg2”
注意:
中间不可以有空格。
二、ifeq / ifneq
- ifeq : 判断参数
是否相等
,相等为 true, 否则是 false. - ifndef : 判断参数
是否不等
,不等为 true, 否则为 false.
ifeq (arg1,arg2)
# 如果 arg1 等于 arg2,则执行这里的命令
else
# 否则执行这里的命令
endif
ifneq (arg1,arg2)
# 如果 arg1 不等于 arg2,则执行这里的命令
else
# 否则执行这里的命令
endif
三、ifdef / ifndef
- ifdef : 判断参数
是否有值
,有值为 true, 否则是 false. - ifndef : 判断参数
是否没有值
,没有值为 true, 否则为 false.
ifdef variable
# 如果 variable 被定义,则执行这里的命令
else
# 否则执行这里的命令
endif
代码讲解:
.PHONY : test
var1 := A
var2 := $(var1) # 将var1 赋值给 var2
var3 := # var3 为空
test :
ifeq ($(var1),$(var2)) # 判断var1 和var2 是否相等
@echo "var1 == var2"
else
@echo "var1 != var2"
endif
ifdef var3 # 判断var3 是否为空
@echo "var3 is NOT empty"
else
@echo "var3 is empty"
endif
注意:
- 条件判断语句之前可以有空格, 但不能有 Tab 字符
(' \ t ')
. - 在条件语句中
不要使用自动变量
。($@, $^, $<) - 一条完整的条件语句必须位于同一个 makefile 中。
四、经典示例
提问 :
下面这两段代码的执行结果相同吗?
实践出真知,下面就来实际实现一下:
.PHONY : test
var1 :=
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 解析的过程中
总结
下一篇介绍 函数的定义于调用。