Prüfen, ob Datei vorhanden ist, bevor Sie ihn in der Datei makefile
Habe ich ein makefile in einem C++ - Projekt (compiler: C++11). Wie können Sie überprüfen, um zu sehen, ob eine bestimmte Datei vorhanden ist, bevor Sie ihn mit einem makefile-Befehl?
Hier ist der code:
bin: charstack.h error.h
g++ -Wall -std=c++11 main.cpp charstack.cpp error.cpp -o bin
run:
./bin.exe
clean:
rm bin.exe
# This statement removes auto generated backups on my system.
cl:
rm charstack.h~ charstack.cpp~ main.cpp~ makefile~ error.h~ error.cpp~
Wie hätte ich das makefile überprüfen, um zu sehen, ob die auto-generiert .~ backup-Dateien vorhanden sind, bevor Sie versuchen, Sie zu entfernen, wenn der Benutzer übergibt
make cl
in der Befehlszeile? Das Ziel hier ist die Vermeidung der Ausgabe diese Fehler an das terminal auf laufen machen", cl":
rm: cannot remove `charstack.h~': No such file or directory
rm: cannot remove `charstack.cpp~': No such file or directory
rm: cannot remove `main.cpp~': No such file or directory
rm: cannot remove `error.h~': No such file or directory
rm: cannot remove `error.cpp~': No such file or directory
make: *** [cl] Error 1
- Der Titel war vorher besser. Jetzt ist es (a) nicht-descript, und (b) benennt die falsche Technik.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ehrlich gesagt, das ist ein XY-problem, es ist nicht wegen weder zu der Tatsache, dass das Projekt eine C++ noch, dass es die spec C++11.
Weil der, dass, der Titel der Frage ist ein bisschen irreführend, wie auch die tags.
Sowieso, können Sie die option
-f
. Aus der man-page vonrm
:So, es ist genug, um die folgende Zeile verwenden:
Tatsächlich, es überprüft nicht, ob diese Dateien vorhanden sind, aber es auch nicht sich beschweren, wenn Sie nicht vorhanden sind.
man rm
....Obwohl diese Frage beantwortet wurde, lege ich eine andere Lösung, die funktioniert für beide Dateien UND Verzeichnisse (weil
rm -rf DIRNAME
schweigt nicht mehr)Hier ist eine Regel für das entfernen von einem Verzeichnis in variable
${OUTDIR}
nur, wenn das Verzeichnis existiert. Das Beispiel ist leicht angepasst für Dateien:Beachten Sie, dass die wichtige Beobachtung ist, dass Sie schreiben müssen die üblichen bash-wenn-dann-esle, als ob es, wo auf einer einzigen Linie (D. H. mit
\
bevor ein Zeilenumbruch, und mit einem;
nach jedem Befehl). Das Beispiel kann leicht angepasst werden, um unterschiedliche (nicht-bash -) Muscheln.