Forum: Compiler & IDEs Hilfe zu Make-Prozess


von Neuling (Gast)


Lesenswert?

Hallo,

für meine Entwicklungsumgebung habe ich mir ein eigenes 
Makefilegeschrieben. Nun ist es bei mir so, dass alle compiliert wird, 
wenn auch ein Fehler auftaucht. Es sollte so sein, das sobald ein Fehler 
erscheint der make Prozess abgebrochen werden soll. Wie kann man das im 
Makefile realisieren ?

Danke im Voraus.

von Klaus F. (kfalser)


Lesenswert?

Neuling schrieb:
> Es sollte so sein, das sobald ein Fehler
> erscheint der make Prozess abgebrochen werden soll

Normalerweise wird abgebrochen, aber es könnte sein, dass das Programm, 
das den Fehler erzeugt, keinen Fehlercode zurückliefert.
Rufst Du das make mit der -i Option auf?

Zeig einmal dein Makefile und gib ein bischen mehr Details.

von Neuling (Gast)


Angehängte Dateien:

Lesenswert?

Das makefile befindet sich im Anhang.

von pv (Gast)


Lesenswert?

Neuling schrieb:
> Hallo,
>
> für meine Entwicklungsumgebung habe ich mir ein eigenes
> Makefilegeschrieben. Nun ist es bei mir so, dass alle compiliert wird,
> wenn auch ein Fehler auftaucht. Es sollte so sein, das sobald ein Fehler
> erscheint der make Prozess abgebrochen werden soll. Wie kann man das im
> Makefile realisieren ?

Manche Versionen von make kennen den Paramter -S (achte auf die 
Großschreibung), der den Abbruch des Makelaufes beim Auftreten des 
ersten Fehlers erzwingen soll. Das Setzen dieser Option mag in manchen 
Fällen helfen.

von Neuling (Gast)


Lesenswert?

Danke für die Hilfe.

Ich verwende mingw32-make.exe.

Wo müsste ich diese Option hinzufügen?

von pv (Gast)


Lesenswert?

Neuling schrieb:

> Wo müsste ich diese Option hinzufügen?

Anstelle von "make ..." sollte es "make -S ...." heissen, und zwar 
überall, wo "make" steht oder "make" eingetastet wird.

von Neuling (Gast)


Lesenswert?

Die Option -S hat keine Auswirkung:

Aufruf von MingW32:
>>c:\MinGW\V440\bin\mingw32-make.exe -S

von Stefan E. (sternst)


Lesenswert?

Neuling schrieb:
> Wie kann man das im
> Makefile realisieren ?

Indem man im Makefile den Compiler nicht nur einmal mit allen 
Sourcefiles aufruft, sondern mehrmals mit nur jeweils einem Sourcefile.

von pv (Gast)


Lesenswert?

Neuling schrieb:
> Die Option -S hat keine Auswirkung

Bei mingw32-make soll es sich laut www.mingw.org um das make von GNU 
handeln. Laut www.gnu.org/software/make/manual/ kennt GNU make natürlich 
die Option -S. Auf der Seite mingw.org habe ich keine Aussage gefunden, 
ob die Option in die Windowsvariante übernommen wurde.

Allerdings steht das zu vermuten.

Dass in Deinem Fall "make -S Makefile" ohne Abbruch durchläuft, sollte 
bedeuten, dass keines der von make aufgerufenen und/oder im Makefile 
definierten Programme einen Fehler zurückmeldet.

Dass wundert nicht. Viele Compiler/Übersetzer arbeiten nach dem 
Auftreten eines Fehlers an der nächsten Stelle im Programmtext weiter, 
an der sie es können. (No bug, that's a feature.)

Das läßt sich gegenprüfen, indem im Makefile einer der Programmaufrufe 
so geändert wird, der er mit Sicherheit einen schweren Fehler auslöst.

Sollte make in diesem Fall durchlaufen, bleiben folgende Möglichkeiten:

(1) Eventuell können die aufgerufenen Programme mit Parametern so 
ausgestattet werden, dass sie beim ersten Fehler stoppen.

(2) Falls nicht, kann man versuchen, andere Alternativen für die 
Conmpiler/Übersetzer zu finden, welche dieses Verhalten möglich machen.

(3) Andere Varianten von make einsetzen. Mir fehlt allerdings der 
Glaube, dass es ein geeigneteres make als das Gnu make gibt.

von Stefan E. (sternst)


Lesenswert?

pv schrieb:
> Dass in Deinem Fall "make -S Makefile" ohne Abbruch durchläuft,
> ...

Hast du überhaupt mal einen Blick in das Makefile geworfen?
Wie soll make auch nur irgendeine Chance haben irgendwas zu 
unterbrechen, wenn es überhaupt nur einen einzigen Compileraufruf gibt, 
bei dem gleich alle Souce-Files als Argument übergeben werden?
Es gibt auch keinen Ablauf der Form "erst Compilieren, wenn kein Fehler, 
dann Linken, wenn kein Fehler, ...". In diesem Makefile gibt es schlicht 
nichts abzubrechen für make.

von Klaus F. (kfalser)


Lesenswert?

Mich wundert es übrigens, dass es überhaupt durchläuft.
Das erste Target ist 1_compiler. Nach dem Compilieren sollte es 
aufhören.

von Stefan E. (sternst)


Lesenswert?

Klaus Falser schrieb:
> Mich wundert es übrigens, dass es überhaupt durchläuft.

Es gibt in diesem Makefile kein "Durchlaufen". Der OP ruft die einzelnen 
Schritte offenbar händisch auf.

von Neuling (Gast)


Lesenswert?

Wie könnte man das makefile besser gestalten ?

von pv (Gast)


Lesenswert?

Neuling schrieb:
> Wie könnte man das makefile besser gestalten ?

google "makefile target all"

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.