可以根据条件的值来决定 make 的执行
可以比较两个不同变量或者变量和常量值
注意事项ifxxx (arg1, arg2)
# for true
else
# for false
endif
条件判断语句只能用于控制 make 实际执行的语句;但是,不能控制规则中命令的执行过程。
条件判断语句的语法说明常用形式
ifxxx (arg1,arg2)
其他合法形式
ifxxx "arg1" "arg2"ifxxx 'arg1' 'arg2'ifxxx "arg1" 'arg2'ifxxx 'arg1' "arg2"
条件判断关键字 条件判断语句初探makefile
.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 "var2 is not empty"
endif
执行结果如下所示:
一些工程经验条件判断语句之前可以有空格,但不能有 Tab 字符 ('t')
在条件语句中不要使用自动变量 ($@,$^,$<)
一条完整的条件语句必须位于同一个 makefile 中
条件判断类似于 C 语言中的宏,预处理阶段有效,执行阶段无效
make 在加载 makefile 时
首先计算表达式的值 (赋值方式不同,计算方式不同)根据判断语句的表达式决定执行的内容
下面的输出相同吗?输出不相同。
深入 make 行为makefile
.PHONY : test
var1 :=
var2 := $(var1)
var3 =
var4 = $(var3)
#var3 = 3
test :
ifdef var1
@echo "var1 is define"
else
@echo "var1 is not define"
endif
ifdef var2
@echo "var2 is define"
else
@echo "var2 is not define"
endif
ifdef var3
@echo "var3 is define"
else
@echo "var3 is not define"
endif
ifdef var4
@echo "var4 is define"
@echo "var4 => $(var4)"
else
@echo "var4 is not define"
endif
执行结果如下所示:
当前 makefile 存在 4 个变量,var1 和 var2 为简单赋值,make 在加载 makefile 时就知道它们的值,而 var3 和 var4 为递归赋值,var3 为空,var4 的值是动态变化的,随着 var3 的变化而变化,所以 make 在加载 makefile 时不知道 var4 是否有值,所以就默认认为 var4 有值。



