[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: