Vermeiden Sie „rm“ im Makefile

Vermeiden Sie „rm“ im Makefile

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_PATHdefiniert ist und so /srv/www/htdocsoder 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_ROOTVariable 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 testBefehl 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

verwandte Informationen