Aus der Welt von C und C ++ stammend, haben die meisten Build-Systeme ein installZiel, insbesondere Makefiles (wo es zum Beispiel von GNU empfohlen wird ) oder CMake . Dieses Ziel kopiert die Laufzeitdateien (ausführbare Dateien, Bibliotheken usw.) im Betriebssystem (z. B. C:\Program Files\unter Windows).
Das fühlt sich wirklich abgefahren an, da es für mich nicht in der Verantwortung des Build-Systems liegt, Programme zu installieren (was eigentlich in der Verantwortung des Betriebssystems / Paketmanagers liegt). Dies bedeutet auch, dass das Build-System oder das Build-Skript die Organisation der installierten Programme mit Umgebungsvariablen, Registrierungsvariablen, Symlinks, Berechtigungen usw. kennen muss.
Build-Systeme sollten bestenfalls ein releaseZiel haben, das ein installierbares Programm ausgibt (z. B. .deboder .msi), und dann das Betriebssystem auffordern, dieses Programm zu installieren. Dies würde es dem Benutzer auch ermöglichen, zu deinstallieren, ohne etwas eingeben zu müssen make uninstall.
Meine Frage: Warum empfehlen Build-Systeme normalerweise, ein installZiel zu haben?
make installWird normalerweise unter /usr/local(oder sogar /opt) installiert, die Verzeichnisse sind, die nicht vom "Kernbetriebssystem / Paketverwaltungssystem" behandelt werden. Keine Ahnung, ob Windows eine ähnliche Konvention hat.
make installdass dies keinen Sinn ergibt, wenn wir über Cross-Compiling sprechen
DESTDIR.