> В каком веке будет корректная обработка правил с генерацией нескольких файлов?пока не придумали специального синтаксиса для задания правил с генерацией нескольких целей одним правилом, но можно использовать уже имеющиеся возможности, например так (на примере работающего Makefile):
#######
# объявляем переменную-отсечку: если её значение переменной не пустое, значит правило генерации выполнено и ещё раз вызывать его не надо
check:=
# объявляем order-only зависимости между сгенерёнными файлами
# это нужно для того, чтобы задержать выполнение правил трансляции b1.c->b1.o и c1.c->c1.o до тех пор, пока не будет выполнена ре-генерация файлов a1.c, b1.c, c1.c из x.x (одним вызовом правила генерации нескольких целей) (при повторном вызове make после изменении x.x)
b1.c: | a1.c
c1.c: | b1.c
# правило генерации нескольких целей
# сгенерим a1.c, b1.c, c1.c из x.x одним вызовом touch a1.c b1.c c1.c
# установим переменную-отсечку, чтобы вызвать правило генерации только один раз
# не выполняем правило, если переменная-отсечка установлена
a1.c b1.c c1.c: x.x
$(if $(check),,$(eval check:=1)touch a1.c b1.c c1.c)
# правила трансляции a1.c->a1.o, b1.c->b1.o и c1.c->c1.o
c1.o: c1.c
touch $@
b1.o: b1.c
touch $@
a1.o: a1.c
touch $@
# основная цель
all: c1.o b1.o a1.o
clean:
rm -f a1.c b1.c c1.c a1.o b1.o c1.o
.PHONY: all clean
.DEFAULT_GOAL := all