Hallo zusammen,
ich möchte den Job "clean" und den Job "all" mit einem knopfdruck
erledigen.
Dazu habe ich den Eintrag im Makefile entsprechend geändert:
aus
>> "all: begin gccversion sizebefore build sizeafter end"
habe ich
>> "all: begin clean gccversion sizebefore build sizeafter end"
gemacht.
Nun hat es den Anschein, dass die shell nicht wartet, bis "clean" fertig
ist.
Wie kann ich den Exitcode von Job "clean" abfragen, oder solange warten,
bis clean fertig ist?
Ich erhalte folgende Fehlermeldung:
make clean all
Aber, wenn du das haben willst, deutet das eher darauf hin, dass in
deinem Makefile irgendeine Abhängigkeit nicht sauber spezifiziert
ist. Normalerweise braucht man das nicht.
danke für die Tipps.
Ich wollte einfach (aus Faulheit) das aufeinanderfolgende Drücken der
"Knöpfe" automatisieren;-)
ich habe mal mit 'copy con maker.bat'
make clean
make all
^Z
getippt und maker.bat aufgerufen. Das funktioniert!! (Juhuu)
'make clean all' hingegen bringt exakt den gleichen Fehler wie im
Output-Fenster von PN.
Was ja meine Annahme bestätigt, das die Windows Command Shell wartet,
bis 'make clean' fertig ist ist und dann erst mit 'make all'
weitermacht.
Nunja.
ich lege mir jetzt 'maker.bat' auf F12. Muss mir allerdings noch die
XML-Datei von PN suchen ;-))
Danke erstmal - auch wenn noch keine 100%tige Erklärung gefunden habe -
so gehts jedenfalls.
Kann man die sh nicht einfach nach 'make clean' etwas warten lassen?
einen wait -Befehl habe ich gefunden. Aber kann mit der geforderten pid
oder mit dem jobname nichts anfangen. Na; sooo wichtig ist's auch wieder
nicht.
Viele Grüße
AxelR.
Axel Rühl wrote:
> 'make clean all' hingegen bringt exakt den gleichen Fehler wie im> Output-Fenster von PN.
Ach, jetzt sehe ich das Dilemma.
> Was ja meine Annahme bestätigt, das die Windows Command Shell> wartet, bis 'make clean' fertig ist ist und dann erst mit 'make all'> weitermacht.
Nein, deine Annahme bezüglich der Ursache des Fehlers ist flasch. Mit
diesen komischen automatischen Abhängigkeiten verheddert sich da
intern was, wenn man beide Schritte in einem Aufruf machen will.
Im Prinzip müsste ja auch »make clean; make all« gehen, aber ich bin
mir nicht ganz sicher, ob cmd.exe nun so Unix-shell-kompatibel ist.
Die Frage, wofür du das clean überhaupt erst brauchst, hast du mir
aber noch nicht beantwortet.
> aus>>> "all: begin gccversion sizebefore build sizeafter end"> habe ich>>> "all: begin clean gccversion sizebefore build sizeafter end"> gemacht.
Damit führst du die ganze Verwendung von make ad absurdum. Du könntest
auch einfach ein Skript schreiben, das das macht. Der einzige Grund,
warum make existiert, ist, damit man nicht immer alles bauen muß,
sondern nur das, was sich geändert hat und was davon abhängt.
>Die Frage, wofür du das clean überhaupt erst brauchst, hast du mir>aber noch nicht beantwortet.
ich dachte gelesen zu haben, dass man erst 'clean' drücken soll und dann
'all'...
Ich habe allerdings auch schon geschnallt, das er tatsächlich nur die
Dateien neu anfasst, die auch geändert wurden. Tolle Sache!
Somit ist die Sache wirklich vollkommen daneben. Ad absurdum eben, wie
Rolf richtig feststellte.
Wozu dient denn der 'clean' Befehl dann eigentlich, wenn er nicht
benötigt wird. Zur "Sicherheit"?
Gruß
AxelR.
Axel Rühl wrote:
> Wozu dient denn der 'clean' Befehl dann eigentlich, wenn er nicht> benötigt wird.
Eben zum Aufräumen, wie der Name ja eigentlich sagt. Die Idee dahinter
ist, dass man hinter dem "clean"-Target im Makefile alle Aktionen
anordnet, die vorgenommen werden müssen, um sämtliche im Build-Prozess
generierten Dateien wieder zu löschen, d. h. man kehrt zum Zustand
vor dem Beginn des Compilierens zurück.
Zuweilen nimmt man an einem Projekt auch mal Änderungen vor, die im
Makefile nicht als Abhängigkeit erfasst worden sind. Denkbar ist
beispielsweise in unserem Zusammenhang, dass man den Zielprozessor
vom ursprünglich angedachten ATmega88 auf einen ATmega168 hochgedreht
hat. Damit sind alle bereits existierenden Objektdateien hinfällig.
Nun könnte man loslegen und alle Objektdateien noch vom Makefile
abhängig machen, damit sie nach jeder Änderung des Makefiles automatisch
neu gebaut werden. Das lohnt aber eigentlich nicht, da diese Änderung
praktisch einmalig innerhalb der Lebenszeit des Projekts war. Dann
bietet es sich als Krücke an, dass man vor dem nächsten "make" eben
mal schnell ein "make clean" reinwirft, um von vorn anzufangen.