Esiste una regola generale per quando dovresti usare "make clean" anziché semplicemente "make"?


11

Sto scrivendo un programma a più file in questo momento, e apparentemente eseguo solo 'make' (come si potrebbe pensare intuitivamente che debba essere fatto nella maggior parte delle situazioni) per qualche motivo fa fallire il mio programma. Immagino di poter fornire maggiori dettagli sul problema, ma l'importante è che funzioni quando si usa "make clean". Quindi mi chiedevo se qualcuno conoscesse la regola generale per eseguire "make clean" anziché semplicemente "make"

Risposte:


17

Esegui clean clean in due situazioni: quando vuoi impacchettare il codice sorgente (e quindi non hai bisogno / desideri gli oggetti costruiti) O quando hai qualche motivo per credere che gli oggetti costruiti siano cattivi.

Nel tuo caso, stai usando 'make clean' per risolvere un problema che è probabilmente il risultato di un Makefile con errori. Qualcosa dentro non si sta ricompilando quando dovrebbe, e ciò sta causando un errore del file binario di output.

Ci sono molte ragioni che potrebbero accadere, a seconda della complessità del tuo progetto e di come l'hai usato, ma l'essenza di ciò è: devi dedicare un po 'di tempo al debug del tuo Makefile.


6
Dimentichi "qualche cambiamento nell'ambiente di costruzione" come compilatore aggiornato, nuove versioni di librerie ecc. Sempre una buona idea "ripulire" in questi casi solo per assicurarsi che tutti i moduli cantino dallo stesso foglio di brani!
James Anderson,

2
@JamesAnderson Uno potrebbe obiettare che questi sono semplicemente esempi di Makefile con errori.
Kristof Provost,

4
@KristofProvost: Non sono sicuro che classificherei "New ABI" (possibilmente introducendo una nuova versione del compilatore) come "buggy Makefile". È sufficientemente al di fuori dell'ambito di ciò che mi aspetterei da "fare".
Vatine,

1
È vero, ma è possibile (e nemmeno così difficile) aggiungere il compilatore ai makefile come prerequisito. È sufficiente per cogliere il problema. Tutto sommato non è un problema enorme ed è comunque molto raro. Ho sottolineato perché ho usato (e scritto) i makefile che tengono conto dei flag del compilatore e simili. Questo è anche abbastanza raro nei makefile, ma molto utile (più che controllare il compilatore;)). Le mie aspettative riguardo a makefile validi e ben scritti sono piuttosto elevate. Le mie aspettative sul makefile medio sono piuttosto basse ...
Kristof Provost,

8

Concordo con la risposta di Michael Kohne in generale. Vorrei aggiungere che è necessario leggere i documenti di installazione per sapere cosa fa effettivamente "make clean". Ci possono essere diversi livelli di clean che potresti dover usare, come "make realclean" e "make distclean". Ci sono convenzioni informali per questi, ma niente scolpito nella pietra.


2
+1: "devi leggere i documenti di installazione per sapere cosa fa effettivamente" make clean ". Non esiste una "regola generale". Devi effettivamente leggere i documenti.
S.Lott

5

Capisco che questo è il tuo progetto, quindi è il tuo makefile. Il mio obiettivo è quello di produrre make sempre una build corretta, se è possibile produrne una. Se make cleanè necessario riprendersi da una certa condizione, a mio parere makefileè sbagliato e dovrebbe essere corretto. Se le tue dipendenze sono state calcolate correttamente, un semplice makedovrebbe ricompilare tutto ciò che deve essere ricompilato.


2
Sono d'accordo. In questi giorni non è più un problema di spazio su disco quasi infinito, ma sono abbastanza vecchio da ricordare quando sono stati utilizzati clean e make realclean principalmente per risparmiare spazio su disco dopo la creazione dell'eseguibile collegato. Fare GCC, apache, perl, ecc. Ha lasciato molte cose in giro.
Bill Ruppert,

1

Avrei eseguito "make clean" prima di una build notturna. In quel caso, probabilmente, il tempo aggiuntivo necessario per eseguire una build completa non importerà molto, ma la sicurezza aggiuntiva che otterrete assicurandovi che tutto sia nella versione giusta vale probabilmente la pena.


Ciò dipenderà dalle dimensioni del tuo progetto. Dove utilizzo una build incrementale impiegherebbe 2-4 ore con le modifiche apportate da altri siti durante la notte. Una build pulita potrebbe richiedere da 7 a 9 ore. Inoltre, a volte avevamo 2 o 3 rami che avremmo voluto costruire. Anche su macchine veloci, basi di codice molto grandi devono essere trattate in modo abbastanza diverso da quelle più piccole.
TafT
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.