Me temo que lo que está tratando de hacer no es posible sugerir la forma en que lo haga, ya que - como ya se mencionó - (GNU) que sólo permite un único tallo '%', ver http://www.gnu.org/software/make/manual/make.html#Pattern-Rules:
Una regla de patrón parece una regla ordinaria, excepto que su objetivo contiene el carácter '%' (exactamente uno de ellos).
Sin esto, la creación de objetivos "multidimensionales" es engorrosa.
Una forma de evitar esto es mediante la reconstrucción del nombre de la dependencia en el comando (en lugar de en la lista de dependencias):
SRC := a.dat.1 a.dat.2
all : $(SRC:%=%.dat2rlt)
%.dat2rlt :
dat2rtl $(word 1,$(subst ., ,$*)).rlt.$(word 2,$(subst ., ,$*)) $*
Por supuesto, sin embargo, de esta manera se perdería la dependencia, lo hará no reconstruir una vez que se ha actualizado el rlt.
La única manera que puedo ver para hacer frente a esto es mediante la generación de las reglas de forma explícita:
SRC := a.dat.1 a.dat.2
all : $(SRC)
define GEN_RULE
$1.dat.$2 : $1.rlt.$2
dat2rtl $$< [email protected]
endef
$(foreach src,$(SRC),$(eval $(call GEN_RULE,$(word 1,$(subst ., ,$(src))),$(word 3,$(subst ., ,$(src))))))
No, esto no se encuentra. Una solución alternativa es agregar reglas dinámicamente (con eval o include). Ver p. [esta pregunta relacionada] (http://stackoverflow.com/questions/2880975/make-invoke-command-for-multiple-targets-of-multiple-files) or [this one] (http://stackoverflow.com/ preguntas/3545700/make-like-tool-that-supports-automatic-deletion-of-temp-files-and-regular-express). – reinierpost