我正在尝试在 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 交叉编译器上)
当你call
在此函数中,Make 使用您提供的任何参数(在本例中不相关)评估定义。所以如果定义包含类似的东西$(info ...)
or $(error ...)
, 即使在评论中,Make 将对其进行评估,您将看到结果(请参阅文档 https://www.gnu.org/software/make/manual/html_node/Makefile-Contents.html;我已经在 GNUMake 3.81 中对其进行了测试)。
要获得您想要的行为,请添加几个美元符号:
define TESTDEF
ifeq ("X","Y")
$$(info SHALL not appear)
# $$(info DEFINITELY SHALL not error...)
endif
endef
$(eval $(call TESTDEF))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)