Provenendo dal mondo di C e C ++, la maggior parte dei sistemi di compilazione ha un install
target, in particolare Makefile (dove è raccomandato da GNU per esempio) o CMake . Questa destinazione copia i file di runtime (eseguibili, librerie, ...) nel sistema operativo (ad esempio, C:\Program Files\
su Windows).
Questo sembra davvero disordinato, dal momento che per me non è responsabilità del sistema di compilazione installare programmi (che in realtà è la responsabilità del sistema operativo / gestore di pacchetti). Significa anche che il sistema di compilazione o lo script di compilazione devono conoscere l'organizzazione dei programmi installati, con variabili di ambiente, variabili di registro, collegamenti simbolici, autorizzazioni, ecc.
Nella migliore delle ipotesi, i sistemi di compilazione dovrebbero avere una release
destinazione che produrrà un programma installabile (ad esempio .deb
o .msi
), quindi chiedere gentilmente al sistema operativo di installare quel programma. Consentirebbe inoltre all'utente di disinstallare senza dover digitare make uninstall
.
Quindi, la mia domanda: perché il sistema di build di solito consiglia di avere un install
obiettivo?
make install
di solito si installa in /usr/local
(o anche /opt
) che sono directory non gestite dal "sistema operativo core / sistema di gestione dei pacchetti". Non ho idea se Windows abbia qualche convenzione simile però.
make install
non ha senso quando parliamo di cross-compilation
DESTDIR
.