调用自定义函数后 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 的一个错误。
我正在编写一个从给定名称创建空目标文件名的宏。并且还将命名目标重定向到该空目标名称。
在 运行 这个函数之后,我希望我的 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 的一个错误。