Cosa fa 'make install'?


52

Passando da Windows a Linux, non riesco a capire il processo di installazione del software in Linux. In Windows, quando eseguiamo un file di installazione, ci viene chiesto dove si desidera installare il programma, molto probabilmente solo nella cartella dei file di programma. Successivamente, modifica il registro. Questa si chiama installazione in Windows. Cosa significa esattamente "installare software" in Linux?

Supponiamo di aver scaricato il codice sorgente, configurarlo e quindi creare il file binario usando make. Ora è solo un programma binario, non ancora utilizzabile. Come verrà "installato"? Di make install? E cosa fa esattamente questo comando?


1
La mia risposta a stackoverflow.com/questions/528399/… offre una breve panoramica dei soliti tipi di cose fatte da make installpassaggi dal punto di vista dei programmatori.
Dmckee,

Risposte:


44

Make è un programma di flusso di lavoro generico, solitamente utilizzato per la compilazione. Ma può essere usato per qualsiasi cosa.

Quando fai qualcosa come "make all", il programma make esegue una regola denominata "all" da un file nella directory corrente denominata "Makefile". Questa regola di solito chiama il compilatore per compilare un codice sorgente in binari.

Quando fai "make install", il programma make prende i binari dal passaggio precedente e li copia in alcuni percorsi appropriati in modo che possano essere accessibili. A differenza di Windows, l'installazione richiede solo la copia di alcune librerie ed eseguibili e non esiste alcun requisito di registro in quanto tale. In breve, "make install" copia solo i file compilati in posizioni appropriate.


4
Tecnicamente, il registro non è un requisito : ciò che tutti gli installatori aggiungono è solo una funzione di praticità, proprio come il database del gestore pacchetti in Linux, per le persone a cui piace essere in grado di disinstallare il software.
Grawity il

2
@grawity In realtà, in Windows è necessario modificare il registro per molte ragioni, come l'integrazione. In Linux, l'integrazione di software l'uno con l'altro di solito comporta solo la copia di file o l'aggiunta di linee per configurare i file con qualcosa come uno script post-installazione.
Camilo Martin,

@sharjeel Sarebbe utile dire come posso trovare la regola denominata allin Makefilee come appare il marker di fine di quella sezione, così posso vedere dove l'elaborazione della regola si allferma.
Pro Backup

36

make installfa qualunque cosa l' Makefileautore voglia che faccia. In genere, a questo punto, è troppo tardi per cambiare la directory di installazione, come è spesso noto in precedenza , durante la compilazione, quindi è possibile fare riferimento ai file della guida e ai file di configurazione con i nomi percorso corretti.

Molti progetti usano GNU Autotools per cercare di migliorare la loro portabilità tra differenze hardware e di sistema operativo. (Diverse varianti di Unix utilizzano intestazioni leggermente diverse per le dichiarazioni di funzioni che sono leggermente fuori dal normale percorso, tranne per il fatto che la maggior parte dei programmi necessita di uno o l'altro di quelli dichiarati in posizioni diverse.)

Quando un progetto utilizza gli Autotools, il mantra normale per installarlo è:

./configure
make
make install

In ./configuregenere consente di utilizzare un'opzione della riga di comando simile --prefix /opt/apacheo qualcosa di simile per specificare un percorso diverso. /usr/local/è un valore predefinito comune prefix. È molto più facile per il software costruito localmente vivere in un posto e il software fornito dalla distribuzione può vivere nelle "directory principali":, /usr/ /bin/e così via. (I packager sono molto attenti a non toccare mai i file /usr/local/: sanno che è riservato esclusivamente agli amministratori di sistema.)

Ad ogni modo, ./configure --prefix /path/to/new/prefixverrà impostata una variabile in quella Makefileche è disponibile durante la compilazione del programma, modificando le pagine del manuale in modo che puntino alle posizioni corrette per i file, modificando i file di configurazione, ecc. Quindi makecostruirà il software specificamente per la posizione di installazione desiderata e make installlo installerà in quella posizione.

La maggior parte dei programmi può essere eseguita anche senza il make installpassaggio finale : ./program_namespesso li avvierà. Questa è sicuramente una cosa per progetto - alcuni, come postfix, qmailecc., Sono costituiti da molti pezzi mobili diversi e si affidano a tutti loro che lavorano insieme. Altri, come lso supotrebbero essere abbastanza autosufficienti da eseguire correttamente dalla directory in cui sono stati incorporati. (Questo non è spesso utile - ma a volte molto utile.)

Tuttavia, non tutti i progetti utilizzano gli Autotools: sono enormi , complicati e miserabili da mantenere. Gli scritti a mano Makefilesono molto più semplici da scrivere, e personalmente penso che distribuire un semplice Makefilecon variabili di configurazione disponibili sia molto più semplice per sviluppatori e utenti. (Anche se il ./configure ; make ; make installmantra è davvero facile per gli utenti quando funziona.)


19

make installnon fa altro che eseguire la installfunzione / sezione nel tuoMakefile


Bene, gli piace solo make clean, in pratica esegue solo i codici nella sezione.
Wulfric Lee,

8

La cosa più importante da menzionare per quanto riguarda l'installazione del software su Linux è che è molto più affidabile e facile installare il software dalla tua distribuzione (questo è lo scopo!). Usa solo make installse non c'è altro modo (considera anche i programmi alternativi).

L'errore comune degli utenti di Windows è scaricare programmi da luoghi diversi e provare a installarli, dimenticando di controllare i loro pacchetti di distribuzione, che potrebbero essere installati con un solo clic o comando (nel gestore dei pacchetti).

Ricorda inoltre che uno dei motivi principali dell'assenza di infezioni da virus su Linux è che il software è (o dovrebbe essere) installato da una posizione centrale (attendibile) anziché in molti siti casuali.

Come nota aggiuntiva, mentre le distribuzioni come Ubuntu contengono sempre pacchetti obsoleti, ci sono anche distribuzioni come Arch Linux che sono sempre aggiornate (anche se non offrono letteralmente tutti i programmi mai rilasciati per Linux, come Debian / Ubuntu).

Quanto a ciò che accadrebbe esattamente quando si utilizza il gestore pacchetti, verificherebbe bene le dipendenze, scaricare i pacchetti, decomprimere, mettere tutti i file nelle rispettive directory, secondo FHS e le linee guida della distribuzione e alcune altre routine che probabilmente potresti scoprire dalla pagina man del gestore pacchetti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.