如何动态生成Makefile目标

时间:2018-05-21 09:01:09

标签: makefile gnu-make

假设我有一些名为foo.cbar.cbaz.c的文件,...我想为每个运行构建任务的文件创建一个Makefile目标。

foo:
  make foo.c
.PHONY: foo

foo.c:
  run build foo

bar:
  make bar.c
.PHONY: bar

bar.c:
  run build bar

...

我基本上只想做make foo并构建make foo.c。但我有x个文件,并希望为每个文件制作任务。如何做到这一点。类似的东西:

FILES = $(foo bar baz ...)

$(FILES): $(FILES)
  make $(FILE)
.PHONY: $(FILE)

$(FILES).c: $(FILES)
  run build $(FILE)

但是所有文件都彼此独立。

1 个答案:

答案 0 :(得分:1)

您可以pattern rules用于.c目标,static pattern rules用于那些必须是虚假目标的目标(即foobar示例):

targets := foo bar

.PHONY: $(targets)

# static pattern rule
$(targets): %:
   make $*.c

# pattern rule
%.c:
   run build $*