makefile: multi-line variable substitution
Von: , Frage gestellt am Di, 26. Mai 2009
Hello,
gerade versuche ich ein Makefile für ein kleines Projekt zu verbessern. Unter anderem benötige ich eine description_file welche einen Abschnitt enthält wie folgt (in diesem Fall 6 MD5-Summen, aber das ist nebensächlich):
~>cat description_file [MD5] filename1 = 3405DA45BFA456 filename2 = 3405FA45BFA405 filename3 = 58705DA468BFA4
Wenn ich das Project übersetze, generiere ich zuerst die Dateien (das funktioniert) mit code in der Makefile ungefähr wie
FILENAMES = filename1 filename2 filename3 all: for i in $(FILENAMES) do; <processing commands>; done
es funktioniert auch, einzelne Variablen durch einen Einzel-String zu ersetzen:
sed s/{{VERSION}}/'$(GRF_VERSION)'/ inputfilename | sed s/{{NAME}}/'$(GRF_NAME)'/ > processed_filename
Das könnte ich dann durch Pipes aneinanderhängen, um für jede Datei eine eigene Variable einzuführen und separat zu ersetzen. Allerdings würde ich das ganze gerne in einer For-Schleife machen, um sich wiederholenden Code zu vermeiden, der auch schnell unübersichtlich wird und an vielen Stellen auch angepaßt werden muß, wenn eine Datei hinzukommt oder sich die Dateinamen ändern.
Ich würde also gerne etwas ungefähr wie
cat $(inputfilename) | sed s/VARNAME/'for i in $(FILENAMES) do; echo `md5sum $$i`/ > processed_description_file
umsetzen. Irgendwelche Ideen wie ich das umsetzen könnte?
Die Versuche mir bspw. eine mehrzeilige Variable mittels solcher For-Schleife zu generieren waren alle nicht von Erfolg gekrönt. Entweder blieb die Variable leer oder ich bekam ein "command not found", weil eine der MD5-Summen als Kommando versucht wurde zu interpretieren.
Das Ganze soll natürlich möglichst Plattform-unabhängig laufen :) - wobei auf Win MinGW / MSys verwendet wird (also m.E. keine große Einschränkung).
Gruß,
Ingo
