调用自定义函数后 Makefile 中缺少分隔符错误

Missing separator error in Makefile after calling a custom function

我正在编写一个从给定名称创建空目标文件名的宏。并且还将命名目标重定向到该空目标名称。

在 运行 这个函数之后,我希望我的 Makefile 看起来像这样:

a:./build/._a

./build/._a:
        @echo building $@

然而我经常得到这个:

$ make a
a:./build/._a
Makefile:7: *** missing separator.  Stop.

这是我的 Makefile:

define empty_target
$(eval :=./build/._)
$(info :$())
$(eval :$())
endef

$(call empty_target,a,_A)

$(_A):
        @echo building $@

这样做就可以了:

define empty_target
$(eval :=./build/._)
:$()
endef

$(eval $(call empty_target,a,_A))

$(info _A=$(_A))

$(_A):
        @echo building $@

是的,有一个嵌套的 eval,如果您希望变量赋值在 eval 调用内部生效(否则 </code> 在设置之前展开,并展开为空白)。 </p> <p>关于您的原始代码,我同意,它引发该错误的原因有些令人困惑。我可以重现,如果我在 <code>empty_target 中间添加行 blah:blah2,它似乎摆脱了消息。我猜这是 $(eval) 调用之间 make 崩溃 whitespace/newlines 的一个错误。