如何动态生成Makefile目标

Lan*_*ard 4 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

...
Run Code Online (Sandbox Code Playgroud)

我本质上只是想做make foo并且它构建了make foo.c。但我有 x 个文件,并且希望为每个文件创建任务。如何实现这一点。就像是:

FILES = $(foo bar baz ...)

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

$(FILES).c: $(FILES)
  run build $(FILE)
Run Code Online (Sandbox Code Playgroud)

但所有文件都是相互独立的。

眠りネ*_*ネロク 5

您可以对目标使用模式规则.c,对必须是虚假目标的目标使用静态模式规则foo(即,在bar您的示例中):

targets := foo bar

.PHONY: $(targets)

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

# pattern rule
%.c:
   run build $*
Run Code Online (Sandbox Code Playgroud)