我正在尝试在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))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
---- start ----
SHOULD not appear
Makefile:14: *** DEFINATELY SHOULD not error.... Stop.
Run Code Online (Sandbox Code Playgroud)
有一些我不知道的伎俩吗?有可能做ifeq的内部定义吗?(注意:这发生在我的本机GNU 3.81 make和我的mips uclibc交叉编译器上)
Bet*_*eta 11
当您使用call此函数时,Make会使用您提供的任何参数来评估定义(在本例中不相关).因此,如果定义包括像$(info ...)或者$(error ...),即使是在一个注释,让会评估它,你会看到的结果(见文档 ;我在gnumake的3.81测试过).
要获得所需的行为,请添加几个美元符号:
define TESTDEF
ifeq ("X","Y")
$$(info SHALL not appear)
# $$(info DEFINITELY SHALL not error...)
endif
endef
$(eval $(call TESTDEF))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6695 次 |
| 最近记录: |