Re: Makefile
Am Donnerstag, 10. November 2005 22:59 schrieb Sebastian Kayser:
> Wo wir gerade so schön dabei sind. Hat jemand von Euch 'ne Ahnung,
> wie ich ein Schleifenkonstrukt ählich obigem hinbekomme, bei dem im
> do-Teil auftretende Fehler ignoriert werden?
>
> $ ls
> bar Makefile
>
> $ cat bar
> bar
>
> $ cat Makefile
> all:
> @-set -e; for i in foo bar; do cat $$i; done
>
> $ make
> cat: foo: Datei oder Verzeichnis nicht gefunden
> make: [all] Fehler 1 (ignoriert)
>
> Hier sagt er zwar schön er hat den Fehler ignoriert, aber hat die
> Ausführung der Schleife de facto nach dem ersten Durchlauf
> abgebrochen.
Ja, weil Du mit "set -e" erzwingst, dass die Shell sich sofort bei einem
Fehler beendet (man bash -> shell builtin commands -> set).
Der Fehler wird durch make ignoriert, daher die Meldung "ignoriert".
Dass make den Fehler ignoriert, kommt durch das Minuszeichen direkt
nach dem @.
> Da das ganze auf der Shell funktioniert
>
> $ for i in foo bar; do cat $i; done
> cat: foo: Datei oder Verzeichnis nicht gefunden
> bar
>
> muss es wohl eine Intelligenz von make sein, die bei Beispiel 2
> interveniert, den Fehler abfängt und die weitere Ausführung
> verhindert.
Ne, das liegt daran, dass hier kein "set -e" steht. Stünde es dort,
würde sich die Shell beim ersten Fehler beenden.
> Wie kann man das unterdrücken?
Lass das "set -e" weg. Wenn Du willst, dass das Target durch das
Auftreten irgendeines Fehlers während der for-Schleife fehlschlägt,
dann muss das Minuszeichen direkt nach dem @ auch noch weg.
Viele Grüße, Ole
Reply to: