-
概要
-
两种比较
- 变量与变量之间比较。
- 变量与值之间比较。
- 值与值之间比较没有意义。
-
功能
- 条件的执行一些指令或者变量定义。
- 和宏定义有些类似。
-
解析
- 条件指令
ifeq ($(var1),$(var2))
如果条件成立就执行这个指令到下个指令之间的。形成匹配。 - 比如查看核心数量是单数还是双数。
- 条件指令
-
案例
.PHONY:all clean CORES=$(shell lscpu|grep -E -e "^CPU\(s\):"|cut -d ":" -f 2|xargs) ifeq ($(shell $(($(CORES)%2))),0) RET=even cores else RET=odd cores endif all: @echo $(RET)
-
说明
- 和编程里面的
if else endif
的结构相同。 - 也可以进行多层的
if else else endif
。 - 而且还可以进行条件嵌套。在一个条件判断中再嵌套一个条件判断。
if else
这一行后面都跟着一个条件表达式。- 执行和比较和大多数编程语言一样。
- 和编程里面的
-
条件表达式
-
空格比较
($(strip $(undefine)),)
- 空变量可以包含多个空白字符的前置或后置。所以使用去除空格的方式精确比较。
-
指令类型
ifeq,ifneq,ifdef
ifneq
的格式和ifeq
相同。ifdef
表示定义了没有,和空还是有区别的。
-
定义过和未定义过
- 前者是空白字符。
- 后者是空串。
-
变量和条件
- 前面有讲变量的几处来源。
- 也有讲取消定义
undef
。 - 判断是否已经定义
ifdef,ifndef
还有函数$(origion var)
.判断var
是否定义。如果是undefine
就说明是未定义。否则就是已经定义。
-
注意
- 句首不能是
.RECIPEPREFIX
,句尾可以有注释。 - 结构和其他的一样,可以嵌套,中间的是对应条件的指令。
- 不能使用自变量,自变量是执行时才知道其值,这个发生在读取阶段。
- 可以结合
findstring
函数来判断指令的参数。
- 句首不能是
-
条件判断
最新推荐文章于 2023-04-01 18:46:30 发布