Rolf M. schrieb:
> Falls das Projekt irgendwann in mehrere Verzeichnisse eingeteilt wird,
> muss man das rm dann allerdings für jedes Verzeichnis, in dem generierte
> Files liegen können, extra angeben.
Nein. Ein "-r" zusammen mit einem "*" in den Argumenten von rm ist
trotzdem super-gefährlich. Es gab schon genug die plötzlich dumm aus der
Wäsche geschaut haben. Das hat nichts mit Make zu tun, sondern mit der
Shell-Syntax und dem Verhalten von rm.
> Und wenn die .o-Files in ein
> separates build-Verzeichnis gesteckt werden, muss man das entsprechend
> berücksichtigen.
Dann lässt man "*" weg. Denn gerade da braucht man es nicht:
Ich rede hier von dem Unterschied ein paar Verzeichnisse kontrolliert zu
löschen. Z.B.
1 | $(RM) -r build cache tmp
|
und dem Fehler sich versehentlich das Projekt zu versenken:
Am besten noch bevor man eine größere Änderung in git reingeschoben hat.
Noch dazu dass das "-r" für die beabsichtigte Löschung "*.o" völlig
unnütz ist und nicht benötigt wird.
>> Das führende "-" vor "$(RM)" wird nicht benötigt wenn RM richtig
>> definiert ist (nicht-existierende Dateien ignoriert werden).
>
> Die werden nur dann ignoriert, wenn du -f angibst, was bei dir oben aber
> fehlt. Ohne -f wird bei POSIX rm mit einer Fehlermeldung abgebrochen.
Ne, das passt schon. Die normale Definition von $(RM) ist "rm -f".
Markus F. schrieb:
> Makefiles sollten das (und nur das) löschen, was sie erzeugen.
Ja, und ich würde auch eine Doppel-Doppelpunkt-Regeln verwenden um
Erzeugung und Cleanup im Makefile hintereinander zu haben. Aber ich
wollte es nicht zu kompliziert machen.
Ansonsten geht es bei Dingen die nur teilweise oder gar nicht von Make
erzeugt werden nicht ohne "*". Klassisches Beispiel sind Reste vom
Editor
1 | clean:
|
2 | $(RM) *.bak *~
|
3 | .PHONY: clean
|