gpt4 book ai didi

makefile - GNU make 4.1 : Missing separator when $(if . ..) 在定义的函数中为真

转载 作者:行者123 更新时间:2023-12-03 23:17:32 27 4
gpt4 key购买 nike

当在 shell 命令的输出中找不到字符串时,我试图在 Makefile 中生成错误。 shell 命令依赖于一个参数,因此整个事情都在一个定义的函数中。这是一个极简主义的例子:

define check_in_abcdefg
$(eval TMP := $(shell echo abcdefg))
$(if $(findstring $(1),$(TMP)),,$(error $(1) not in $(TMP)))
endef

$(call check_in_abcdefg,def)

all:
@echo Hello, world!

我希望这个 Makefile 输出 Hello, world!在这种情况下,但我希望它输出 xyz not in abcdefg如果我用这个替换调用线:
$(call check_in_abcdefg,xyz)

问题在于 def检查我有这个输出:

Makefile:6: *** missing separator. Stop.



其中第 6 行是 $(call check_in_abcdefg,def)
为什么在$(if ...) 时语法检查失败条件为真,因为它实际上是空的?

注意虚拟目标中的echo 命令 all正确地前面有一个制表符,而不是四个空格。我在运行 GNU make 4.1.90 built for Windows32 ,而对于较新版本的 GNU make 似乎不会发生这种情况。 .我正在寻找任何可以帮助我使其与 GNU make 4.1.90 一起使用的答案

最佳答案

我不知道为什么旧 make版本在这里窒息,但你可以让它与一个大 $(eval ) 一起工作像这样:

define check_in_abcdefg
$(eval
TMP := $$(shell echo abcdefg)
ifeq ($$(findstring $$(1),$$(TMP)),)
$$(error $$(1) not in $$(TMP))
endif
)
endef

$(call check_in_abcdefg,def)

all:
@echo Hello, world!

关于makefile - GNU make 4.1 : Missing separator when $(if . ..) 在定义的函数中为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47429909/

27 4 0
文章推荐: django - 自定义渲染 RichTextBlock 以删除
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com