differenza tra `make clean` e` make distclean`


25

Ho installato ffmpeg da fonti con aiuto in questa pagina. https://trac.ffmpeg.org/wiki/CentosCompilationGuide

Ho notato che la maggior parte di questo tutorial chiama make distcleandopo make install. Ma solo libvpx chiama make cleandopo l'installazione.

Secondo questo documento, http://www.gnu.org/software/automake/manual/automake.html#Clean make clean elimina tutti i file makecreati e make distcleanelimina tutti i file ./configurecreati.

pulire

Cancella dall'albero di compilazione i file creati da make all.

distinguere

Inoltre cancella qualsiasi cosa ./configure creata.

Capisco che make distcleanè richiesto per la prossima installazione, ma non sono riuscito a capire perché make cleanvenga chiamato dopo l'installazione.

Ffmpeg installato funziona senza problemi. Quindi ho fatto questa domanda perché voglio solo migliorare le mie conoscenze su Linux. Sarebbe molto utile che qualcuno mi dia una spiegazione per questo.


2
Make clean viene chiamato dopo l'installazione per ripulire. Non è necessario mantenere le versioni compilate nella directory in cui è stata compilata se si dispone ancora sia del sorgente (e quindi è possibile ricrearli) che del programma installato.
Hennes,

Risposte:


27

Il parametro usato dopo makedipende solo dagli sviluppatori che hanno scritto il file Makefile. La documentazione a cui fai riferimento in seguito, Autotools, è solo uno dei molti modi per creare un Makefile.

Lo standard tipico è quello di make cleanrimuovere tutti i file intermedi e make distcleanrende l'albero esattamente com'era quando era non tarato (o qualcosa di abbastanza vicino) inclusa la rimozione di qualsiasi output di script di configurazione. Questo è il modo in cui funziona il kernel Linux, ad esempio.

In altre parole, dipende totalmente dagli sviluppatori per ciascuna di quelle librerie, ed è per questo che a volte è cleane altre volte lo è distclean. A proposito, non è necessario eseguire clean/ distclean- Immagino che abbiano eseguito solo per risparmiare spazio su disco. make installdi solito copia i file nella directory di destinazione (ancora una volta dipendente dagli sviluppatori) - in genere posti come /usr/libo /usr/bin(anche determinati dallo script di configurazione, se si tratta di un sistema di compilazione di Autotools)

Queste sfumature sono il motivo principale per cui le persone usano sistemi di gestione dei pacchetti come pacchetti RPM o Debian.


Principale ragione per cui le persone usano pacchetti binari? Che ne dici di risparmiare tempo?
x-yuri,

6

Per quanto ne so, è semplicemente uno spazio sicuro su disco. Dopo aver compilato un programma avrai molti file, ad esempio file oggetto che non sono più necessari, perché sono collegati tra loro nei binari. Tutto può essere ricreato impiegando di nuovo un po 'di tempo della CPU.

Prendi questo esempio con il ffmpegcodice corrente :

  • dopo aver clonato il gitrepository, la sorgente impiega 53 160 kB
  • dopo l'esecuzione della configurazione sono 53 632 kB
  • dopo la compilazione abbiamo più di 10 volte il valore iniziale: 673 668 kB
  • make clean riduce questo a 53 636 kB
  • e finalmente dopo make distcleansiamo quasi al livello subito dopo la clonazione: 53 188 kB

2

Perché il passaggio libvpx usa make cleaninvece dimake distclean

Al momento della stesura della guida libvpx non aveva regole Makefileper il target distclean, quindi è cleanstato usato al suo posto.

Perché make (dist)cleanè incluso dopomake install

make distclean/ make cleanè incluso dopo ciascuno make installsemplicemente come misura precauzionale per fornire una "lavagna pulita" per gli utenti che tornano, cambiano le opzioni di configurazione e si ricompilano (che si è verificato più spesso del previsto).

In una versione precedente della guida alla compilazione, senza la prevenzione make distclean, a volte uno di questi utenti avrebbe riscontrato risultati inaspettati.

Cosa succede se make distclean/ make cleandà un errore?

Come questo:

Makefile:198: Makefile: No such file or directory
make: *** No rule to make target '/tests/Makefile'.  Stop.

o questo:

make: *** No rule to make target 'distclean'.  Stop.

Ignoralo. Significa solo che probabilmente hai corso make distcleandue volte, il che è innocuo.


Vale la pena notare che la guida ora utilizza make distcleanper libvpx.
Hashim,
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.