Hallo lug-ddler!
Ich möchte von einem Make-Durchlauf ein komplettes Logfile anlegen lassen. Um die Auswirkung von Parametern vergleichen zu können, soll bei jedem Durchlauf ein neues Logfile angelegt werden. Dazu wird mit date eine Zeichenkette gebildet, die dem Dateinamen des Logfiles angehangen wird. Allerdings beißen sich Logfile und make noch ein bißchen:
Variante 1 (Die Prozesse legen einzelne reports an, die ungefähr der Bildschirmausgabe entsprechen.)
--Makefile-- DATE = $(shell date +"%Y-%m-%d__%H_%M") export LOGFILE := logfile_$(DATE).txt
all: module_B
module.A: process_A cat process_A.report > $(LOGFILE)
module.B: module.A process_B cat process_B.report >> $(LOGFILE) --end--
Problem: Im Fehlerfall wird cat nicht mehr aufgerufen und das Logfile ist unvollständig; es enthält nur die reports von den erfolgreichen Prozessen
Variante 2
--Makefile-- DATE = $(shell date +"%Y-%m-%d__%H_%M") export LOGFILE := logfile_$(DATE).txt
all: module_B
module.A: process_A | tee $(LOGFILE)
module.B: module.A process_B | tee --append $(LOGFILE) --end--
Auch hier ist der Fehlerfall das Problem, da tee den Fehler "abfängt" bzw. maskiert. Damit läuft make trotz Fehler weiter.
(Variante 3) make TARGET | tee LOGFILE
Das ist keine (bequeme) Lösung, da bei jedem Start der Dateinamen manuell eingegeben werden müßte.
(Variante 4) Ein Skript welches make entsprechend startet (wie in Variante 3) empfinde ich als unelegant. Da geht der Vorteil verloren alle targets in einem Makefile zu haben.
Vielleicht hat ja von Euch jemand eine Idee oder einen Vorschlag, wie sich das Ganze mit make-Bordmitteln elegant lösen lässt.
Grüße Bert
P.S.: Das eigentliche Makefile besteht aus mehr als zwei Prozessen und läuft unter cygwin auf Win7.