Makefile:函数内部规则中的for循环

时间:2014-05-29 04:26:25

标签: makefile

为简单起见,请关注以下示例:

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中已经有很多现有的规则,如果可能的话,我不想采取完全不同的方式来做到这一点。

1 个答案:

答案 0 :(得分:1)

不幸的是,你必须添加更多转义。您想要的最终结果是$$,但call函数会扩展其参数,因此您需要:

define FOO

test:
        @for str in a b c d ; do \
            echo $$$$str; \
        done;

endef

$(eval $(call FOO))

还有其他选择,但大多数取决于您未提供给我们的FOO真实内容。例如,如果您确实不使用任何参数,则根本不需要call。您还可以查看value函数。