10

我正在尝试在 Makefile 中的定义中执行 ifeq,但我似乎遇到了一些错误,我想知道我是否遗漏了一些东西。我有以下 Makefile:

$(info ---- start ----)
ifeq ("X","Y")
$(info DOES not appear_1)
endif

define TESTDEF
ifeq ("X","Y")
$(info SHOULD not appear)
# $(error DEFINITELY SHOULD not error...)
endif
endef

$(eval $(call TESTDEF, 1,2,3))

我收到以下错误:

---- start ----
SHOULD not appear
Makefile:14: *** DEFINITELY SHOULD not error....  Stop.

有什么我错过的技巧吗?是否可以在 ifeq 内部定义?(注意:这发生在我的原生 GNU 3.81 make 和我的 mips uclibc 交叉编译器上)

4

1 回答 1

14

当你使用call这个函数时,Make 使用你提供的任何参数来评估定义(在这种情况下不相关)。因此,如果定义包含类似$(info ...)or的内容$(error ...)即使在注释中,Make 也会对其进行评估,您将看到结果(请参阅文档;我已经在 GNUMake 3.81 中对其进行了测试)。

要获得您想要的行为,请添加几个美元符号:

define TESTDEF
ifeq ("X","Y")
$$(info SHALL not appear)
# $$(info DEFINITELY SHALL not error...)
endif
endef

$(eval $(call TESTDEF))
于 2012-11-16T18:32:15.303 回答