以下代码段
ifeq (1,1)
a = 1
$(info true)
endif
ifeq (1,0)
a = 0
$(info false)
endif
$(info $(a))
打印
true
1
我明白了。如果我将相同的内容放在define
中,然后评估
define foo
ifeq (1,1)
a = 1
$(info true)
endif
ifeq (1,0)
a = 0
$(info false)
endif
endef
$(eval $(call foo))
$(info $(a))
打印
true
false
1
ifeq (1,0)
没有评估为真(因为$(a)
的值最终为1)。但那为什么要打印false
?
答案 0 :(得分:1)
因为在make解析评估结果之前,它首先展开要评估的字符串。
在info
的参数被展开时,eval
函数正在被扩展,在之前解析代码。您需要推迟info
,直到eval
通过转发$
来检查define foo
ifeq (1,1)
a = 1
$$(info true)
endif
ifeq (1,0)
a = 0
$$(info false)
endif
endef
:
{{1}}