从先决条件列表中引用目标名称

时间:2012-03-14 16:29:27

标签: makefile gnu-make

在Makefile中,我想从先决条件列表中引用目标名称并使用它构建一些东西。形式的东西:

%.foo: $(addsuffix .bar, $(DATA_%))
  @echo $<

所以,假设你有:

DATA_test = 1 2 3

当你把它称为:

make test

那将扩展为:

1.bar 2.bar 3.bar

这有可能吗?什么是解决问题的更好方法?

1 个答案:

答案 0 :(得分:1)

如果你的Make版本有secondary expansion,这可能会有用(我无法测试它,因为今天所有我都很方便的是旧版本。)

.SECONDEXPANSION:

%.foo: $$(addsuffix .bar, $$(DATA_$$*))
    @echo $^

没有它,我认为没有比这更好的方法:

define FOO_RULE
$(1).foo: $(addsuffix .bar,$(DATA_$(1)))
endef

FOO_TYPES = test real whatever

$(foreach t,$(FOO_TYPES),$(eval $(call FOO_RULE,$(t))))

%.foo:
    @echo building $@ from $^