Давайте рассмотрим это поэтапно. Мы начинаем с (что-то вроде) вашего make-файла:
t1.xyz : s1.abc
do_something s1.abc > t1.xyz
t2.xyz : s2.abc
do_something s2.abc > t2.xyz
t3.xyz : s3.abc
do_something s3.abc > t3.xyz
Затем мы используем automati c переменные для удаления некоторой избыточности:
t1.xyz : s1.abc
do_something $^ > $@
t2.xyz : s2.abc
do_something $^ > $@
t3.xyz : s3.abc
do_something $^ > $@
Мы обратите внимание, что все эти рецепты одинаковы, поэтому мы заменяем правила одним шаблоном правила :
t%.xyz : s%.abc
do_something $^ > $@
Затем мы можем добавить еще несколько функций:
SOME_TARGETS:= t1.xyz t2.xyz t3.xyz
SOME_SPECIAL_TARGETS:= t4.xyz t5.xyz
ALL_POSSIBLE_TARGETS:= $(patsubst s%.abc,t%.xyz,$(wildcard s*.abc))
all: $(ALL_POSSIBLE_TARGETS)
t%.xyz : s%.abc
do_something $^ > $@
# this overrides the pattern rule for a specific target
t7.xyz : s7.abc
do_something_special $^ > $@
# this overrides the pattern rule for a list of targets
$(SOME_SPECIAL_TARGETS): t%.xyz : s%.abc
do_something_special $^ > $@
Возможно немного больше полировки, но это должно занять вас некоторое время.