评估GNU使条件

时间:2014-05-19 14:39:10

标签: makefile gnu-make

以下代码段

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

1 个答案:

答案 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}}