Ich habe ein Makefile, das ein .PHONY clean-Ziel zum Bereinigen von .o-Dateien und ausführbaren Dateien definiert, das wie folgt aussieht:
%Vor% Alles funktioniert wie es sollte, aber wenn einige dieser Dateien nicht existieren, löst rm
einen Fehler aus (keine solche Datei oder Verzeichnis), und die Ausgabe sagt, dass das Makefile-Ziel fehlgeschlagen ist, als es eindeutig das getan hat, was ich wollte .
Gibt es eine gute Möglichkeit, dem Befehl rm
im Grunde zu sagen: "Entferne diese Dateien, wenn sie existieren, und beschwere dich nicht, wenn sie es nicht tun"? Ich habe die Manpage nach rm
gesucht und keine solche Markierung gefunden.
Edit: Ich habe tatsächlich die Beschreibung des -f
Flags in der Manpage nicht bemerkt, das ist die Lösung.
Verwenden Sie rm -f
(oder besser noch $(RM)
, bereitgestellt von den integrierten make
-Regeln, die mit make -p
ermittelt werden können) anstelle von rm
in Ihrer clean
-Regel.
Wenn Ziele versagen
Wenn ein Ziel ausgeführt wird, gibt es einen Status basierend darauf, ob oder nicht Es war erfolgreich - wenn ein Ziel fehlschlägt, wird make keine ausführen Ziele, die davon abhängen. Zum Beispiel im obigen Beispiel, wenn "clean" schlägt fehl, und rebuild führt das "build" -Ziel nicht aus. Leider kann dies passieren, wenn keine zu entfernende Core-Datei vorhanden ist. Glücklicherweise kann dieses Problem leicht gelöst werden, indem man ein Minuszeichen vor dem Befehl, dessen Status ignoriert werden soll:
%Vor%
~ Ссылка
Ich habe mit rm aufgegeben. Der folgende Befehl löscht Dateien und Verzeichnisse.
%Vor%Um nur Dateien oder nur Verzeichnisse zu entfernen, gibt es die Option -type:
%Vor%Eigentlich habe ich ein kleines Skript (basierend auf diesem Snippet) namens bomb erstellt, das Dateien entfernt, ohne sich zu beschweren: Ссылка