Ich habe Angst, was Sie zu tun versuchen, ist nicht möglich, wie Sie vorschlagen, es zu tun, da - wie bereits erwähnt - (GNU) machen läßt nur einen einzigen Stamm ‚%‘, siehe http://www.gnu.org/software/make/manual/make.html#Pattern-Rules:
Ein Muster Regel sieht aus wie eine gewöhnliche Regel, mit der Ausnahme, dass sein Ziel enthält das Zeichen ‚%‘ (genau einer von ihnen).
Ohne sie ist die Erstellung solcher "multidimensionalen" Ziele mühsam.
Ein Weg, um dies ist durch den Namen der Abhängigkeit in dem Befehl Wiederaufbau (anstatt in der Abhängigkeitsliste):
SRC := a.dat.1 a.dat.2
all : $(SRC:%=%.dat2rlt)
%.dat2rlt :
dat2rtl $(word 1,$(subst ., ,$*)).rlt.$(word 2,$(subst ., ,$*)) $*
Natürlich aber diese Art und Weisen Sie die Abhängigkeit verlieren würden, wird es nicht neu erstellt, sobald die RLT aktualisiert wurde.
Der einzige Weg, ich sehe zu tragen, dass durch die Regeln explizit zu erzeugen:
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))))))
Nein, das fehlt. Eine Problemumgehung besteht darin, Regeln dynamisch hinzuzufügen (mit eval oder include). Siehe z.B. [diese verwandte Frage] (http://stackoverflow.com/questions/2880975/make-invoke-command-for-multiple-targets-of-multiple-files) oder [diese] (http://stackoverflow.com/ questions/3545700/make-like-tool-das-unterstützt-automatisch-deletion-of-temp-files-and-regulary-express). – reinierpost