为简单起见,请关注以下示例:
define FOO
test:
@for str in a b c d ; do \
echo $$str; \
done;
endef
$(eval $(call FOO))
我想当我进入
make test
我会得到
a
b
c
d
(如果规则未在函数中定义,这就是我得到的)
但不幸的是它给了我
tr
tr
tr
tr
我希望我的makefile给我以前的(正确的)结果。请帮忙。
此外,我需要使用函数来生成make规则。 实际的makefile中已经有很多现有的规则,如果可能的话,我不想采取完全不同的方式来做到这一点。
答案 0 :(得分:1)
不幸的是,你必须添加更多转义。您想要的最终结果是$$
,但call
函数会扩展其参数,因此您需要:
define FOO
test:
@for str in a b c d ; do \
echo $$$$str; \
done;
endef
$(eval $(call FOO))
还有其他选择,但大多数取决于您未提供给我们的FOO
的真实内容。例如,如果您确实不使用任何参数,则根本不需要call
。您还可以查看value
函数。