我正在尝试在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交叉编译器上)
答案 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))