Как динамически генерировать цели Makefile - PullRequest
0 голосов
/ 21 мая 2018

Скажем, у меня есть несколько файлов с именами foo.c, bar.c, baz.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 голосов
/ 21 мая 2018

Вы можете использовать правила шаблонов для .c целей и статические правила шаблонов для тех, которые должны быть фальшивымицели (то есть foo и bar в вашем примере):

targets := foo bar

.PHONY: $(targets)

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

# pattern rule
%.c:
   run build $*
...