Come i Makefile automatizzano la compilazione GCC e ti fanno risparmiare tempo

8

Digitare ripetutamente comandi gcc lunghi è doloroso. La situazione peggiora quando aggiungi librerie o modifichi costantemente il codice. Makefile risolve questo problema. Automatizzano il processo di creazione in modo da smettere di digitare gli stessi comandi ancora e ancora.

Ecco un semplice esempio di Makefile. Sostituisce una sequenza di compilazione manuale.

“makefile”.
principale: principale.o util.o
gcc -o main main.o util.o
main.o: main.c util.h
gcc -c -g principale.c
util.o: util.c util.h
gcc -c -g util.c

Questo comando viene eseguito solo se le dipendenze cambiano. Se non è cambiato nulla, Make non fa nulla. Questo è il vantaggio principale. Salta il lavoro già svolto.

Perché questo è importante per il tuo flusso di lavoro

I programmi di grandi dimensioni hanno molte librerie e file sorgente. Il monitoraggio dei file modificati manualmente è soggetto a errori. Un Makefile lo gestisce automaticamente. Ricompila solo ciò che è necessario. Si modifica un file di intestazione. Make ricostruisce ogni file sorgente che lo include. Si modifica una funzione di utilità. Make ricostruisce solo quel file oggetto e ricollega l’eseguibile.

Non è necessario essere su un sistema UNIX per utilizzare questa logica. La maggior parte dei compilatori e degli IDE moderni includono funzionalità simili. Controlla la documentazione del compilatore. Cerca strumenti di automazione della creazione. Funzionano allo stesso modo sotto il cofano.

Questo ci riporta a intestazioni come “stdio.h”. Li hai inclusi negli esempi precedenti senza spiegare il motivo. Sono librerie standard. Qualcuno li ha scritti anni fa. Li hanno resi disponibili per salvarti dal dover reinventare le funzioni di base. Makefile e librerie standard fanno parte della stessa filosofia. Ti permettono di concentrarti sulla logica invece che sugli standard.

Lo strumento è valido tanto quanto le sue regole. Se le tue dipendenze sono sbagliate, Make non riuscirà a ricostruire ciò che dovrebbe. O peggio, creerà codice obsoleto. Controlla i caratteri delle tabulazioni. Verifica i nomi dei file. Ottieni la sintassi corretta e il compilatore farà il lavoro pesante.

Potresti chiederti se la compilazione manuale è sempre più veloce. Per un singolo file, forse. Ma nel momento in cui tocchi un’intestazione in un progetto multi-file, il metodo manuale perde. Inizi a copiare i comandi. Inizi a fare errori di battitura. Inizi a chiederti perché main.o non è stato aggiornato.

Il vero vantaggio è il passaggio dalla digitazione dei comandi alla definizione delle regole. Tu definisci lo stato. Lo strumento impone le transizioni. È un piccolo cambiamento di abitudine. Si ripaga in ogni build successiva.