Makefile - Ricompilazione

Il makeè un'utilità intelligente e funziona in base alle modifiche apportate ai file sorgente. Se hai quattro file main.cpp, hello.cpp, factorial.cpp e functions.h, tutti i file rimanenti dipendono da functions.he main.cpp dipende sia da hello.cpp che da factorial.cpp. Quindi, se si apportano modifiche a functions.h, il filemakericompila tutti i file sorgente per generare nuovi file oggetto. Tuttavia, se si apportano modifiche a main.cpp, poiché questo non dipende da nessun altro file, viene ricompilato solo il file main.cpp e help.cpp e factorial.cpp non lo sono.

Durante la compilazione di un file, il makecontrolla il suo file oggetto e confronta i timestamp. Se il file di origine ha un timestamp più recente rispetto al file oggetto, genera un nuovo file oggetto assumendo che il file di origine sia stato modificato.

Evitare la ricompilazione

Potrebbe esserci un progetto composto da migliaia di file. A volte potresti aver modificato un file sorgente ma potresti non voler ricompilare tutti i file che dipendono da esso. Ad esempio, supponiamo di aggiungere una macro o una dichiarazione a un file di intestazione, da cui dipendono gli altri file. Essere conservatore,make presume che qualsiasi modifica nel file di intestazione richieda la ricompilazione di tutti i file dipendenti, ma sai che non hanno bisogno di essere ricompilati e preferiresti non sprecare il tuo tempo ad aspettare che si compilino.

Se prevedi il problema prima di modificare il file di intestazione, puoi usare il flag `-t '. Questa bandiera dicemakenon per eseguire i comandi nelle regole, ma piuttosto per contrassegnare l'obiettivo come aggiornato cambiando la sua data di ultima modifica. È necessario seguire questa procedura:

  • Usa il comando "make" per ricompilare i file sorgente che hanno davvero bisogno di essere ricompilati.

  • Apporta le modifiche nei file di intestazione.

  • Utilizzare il comando "make -t" per contrassegnare tutti i file oggetto come aggiornati. La prossima volta che si esegue make, le modifiche nei file di intestazione non causano alcuna ricompilazione.

Se hai già modificato il file di intestazione in un momento in cui alcuni file necessitano di essere ricompilati, è troppo tardi per farlo. Invece, puoi usare il flag `-o file ', che contrassegna un file specificato come" vecchio ". Ciò significa che il file stesso non verrà rifatto e nient'altro verrà rifatto sul suo account. è necessario seguire questa procedura -

  • Ricompilate i file sorgente che necessitano di essere compilati per ragioni indipendenti dal particolare file di intestazione, con "make -o file di intestazione". Se sono coinvolti più file di intestazione, utilizzare un'opzione `-o 'separata per ogni file di intestazione.

  • Aggiorna tutti i file oggetto con "make -t".