如何在GNU Make中定义ifeq?

时间:2012-11-16 17:51:42

标签: makefile

我正在尝试在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: *** DEFINATELY SHOULD not error....  Stop.

我有什么诡计吗?有可能做ifeq的内部定义吗? (注意:这发生在我的本机GNU 3.81 make和我的mips uclibc交叉编译器上)

1 个答案:

答案 0 :(得分:10)

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

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

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

$(eval $(call TESTDEF))