Я боюсь, что то, что вы пытаетесь сделать, невозможно сделать так, как вы предлагаете, поскольку, как вы уже упоминали, (GNU) make допускает только один стебель '%', см. http://www.gnu.org/software/make/manual/make.html#Pattern-Rules а>:
Шаблонное правило выглядит как обычное правило, за исключением того, что его цель содержит символ «%» (ровно один из них).
Без него создание таких «многомерных» целей будет затруднительно.
Один из способов обойти это — перестроить имя зависимости в команде (а не в списке зависимостей):
SRC := a.dat.1 a.dat.2
all : $(SRC:%=%.dat2rlt)
%.dat2rlt :
dat2rtl $(word 1,$(subst ., ,$*)).rlt.$(word 2,$(subst ., ,$*)) $*
Однако, конечно, таким образом вы потеряете зависимость, она не будет перестроена после обновления rlt.
Единственный способ, которым я могу решить эту проблему, - явно сгенерировать правила:
SRC := a.dat.1 a.dat.2
all : $(SRC)
define GEN_RULE
$1.dat.$2 : $1.rlt.$2
dat2rtl $$< $$@
endef
$(foreach src,$(SRC),$(eval $(call GEN_RULE,$(word 1,$(subst ., ,$(src))),$(word 3,$(subst ., ,$(src))))))
person
Paljas
schedule
21.08.2015