Provenendo dal mondo di C e C ++, la maggior parte dei sistemi di compilazione ha un installtarget, 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 releasedestinazione che produrrà un programma installabile (ad esempio .debo .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 installobiettivo?
make installdi 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 installnon ha senso quando parliamo di cross-compilation
DESTDIR.