
Ich habe eine Frage zu einer Zeile in einem Makefile. Ich habe das Ziel, meinen lokal installierten Test-/Staging-Server zu „bereinigen“. Momentan sieht das so aus:
clean:
rm -rf $(LOCAL_SERVER_PATH)/*
Solange die Variable LOCAL_SERVER_PATH
definiert ist und so /srv/www/htdocs
oder so ähnlich aussieht, ist alles in Ordnung. Aber ... was, wenn ein Benutzer einen Fehler gemacht und die Variablendefinition falsch eingegeben hat oder ein Konfigurationsschritt schiefgelaufen ist und das Makefile mit einer falschen Definition erstellt wird?
Im Wesentlichen befürchte ich, dass ich versehentlich ein nicht definiertes erhalten könnte $(LOCAL_SERVER_PATH)
und mein Ziel dann folgendem entsprechen würde:
clean:
rm -rf /*
Ist es möglich, mein Makefile so umzugestalten, dass es robuster gegen solche Fehler wird? Ich möchte nicht mit einem Makefile enden, das möglicherweise meine gesamte Linux-Installation (oder sogar Teile davon, da mein Benutzer nicht „root“ ist) löschen könnte.
Antwort1
Überprüfen Sie wie angegeben die Variable, um sicherzustellen, dass sie nicht leer ist:
clean:
test -n "$(LOCAL_SERVER_PATH)" && rm -rf $(LOCAL_SERVER_PATH)/*
Die gleiche Redewendung erscheint in einer großen Anzahl von RPM-Spezifikationsdateien, in denen die BUILD_ROOT
Variable anscheinend nicht gesetzt ist. Da ihr Ersatz nicht allgemein verfügbar ist (trotz der Kommentare vor einiger Zeit inBetreff: [Fedora-Verpackung] Buildroot auslaufen lassen?), ist es hier und da noch zu finden.
Antwort2
Anstatt den test
Befehl zu verwenden, können Sie die Variable im Makefile testen und sich anders verhalten – z. B. dem Benutzer einen Fehler anzeigen und deshalb die Ausführung des Makefiles verweigern:
ifeq (,$(LOCAL_SERVER_PATH))
$(error Set LOCAL_SERVER_PATH variable to run this Makefile)
endif