Compilare più file
Costruisca un programma composto da più file.
Compilare più file è una lezione C Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C Academy include 4 lezioni in totale.
Dal sorgente al programma
La trasformazione di sorgenti C suddivisi in più file in un eseguibile avviene in due fasi: compilazione e collegamento.
Ogni file .c viene compilato separatamente in un file oggetto. Il linker combina poi tutti i file oggetto, risolvendo i riferimenti tra loro, in un unico programma eseguibile.
La compilazione con un solo comando
L'approccio più semplice passa contemporaneamente tutti i file sorgente a gcc. Il compilatore compila ciascun file e poi li collega automaticamente.
L'opzione -o assegna il nome al programma di output. Elenchi tutti i file .c; gli header vengono inclusi tramite #include e non vanno elencati qui.
gcc main.c math_utils.c -o appCompilazione separata
Nei progetti più grandi, compili ogni file in un file oggetto usando -c. Questa operazione produce un file .o e non esegue il collegamento.
La compilazione separata fa sì che, quando si modifica un solo sorgente, sia necessario ricompilare soltanto quel file, velocizzando le build di grandi dimensioni.
gcc -c main.c /* produces main.o */
gcc -c math_utils.c /* produces math_utils.o */La fase di collegamento
Una volta ottenuti i file oggetto, li colleghi per creare un eseguibile. In questo caso gcc agisce da linker, unendo gli oggetti e risolvendo i simboli tra i file.
Questa volta non si usa -c, perché si desidera un programma finale, non un altro file oggetto.
gcc main.o math_utils.o -o appCosa fa il linker
Il linker associa ogni utilizzo di un simbolo alla sua definizione.
Quando main.o chiama add, il linker trova la definizione di add in math_utils.o e li collega. Inoltre include il codice della libreria standard necessario al programma.
Errori di riferimento non definito
Se si dimentica un file oggetto durante il collegamento, il linker non riesce a trovare una definizione e segnala un riferimento non definito.
Si tratta di un errore in fase di collegamento, non di compilazione: ogni file è stato compilato correttamente, ma nella riga di comando finale manca una definizione necessaria.
gcc main.o -o app
/* undefined reference to `add' */
/* fix: include math_utils.o */Opzioni utili per gli avvisi
Compili sempre abilitando gli avvisi. -Wall e -Wextra fanno emergere tempestivamente i possibili bug.
L'aggiunta di -std=c11 seleziona uno standard del linguaggio, rendendo il comportamento prevedibile tra compilatori diversi. Queste opzioni funzionano sia compilando in un'unica fase sia separatamente.
gcc -Wall -Wextra -std=c11 -c main.c
gcc -Wall -Wextra -std=c11 -c math_utils.c
gcc main.o math_utils.o -o appPercorsi degli include
Quando gli header si trovano in un'altra directory, comunichi al compilatore dove cercarli usando -I.
Ad esempio, -Iinclude aggiunge la cartella include/ al percorso di ricerca, così #include "math_utils.h" viene risolto anche da una cartella diversa.
gcc -Iinclude -c src/main.c -o build/main.oPerché la ricompilazione è importante
La compilazione separata è particolarmente utile quando cambia un solo file. Si ricompila l'oggetto relativo a quel file e poi si esegue nuovamente il collegamento.
Se però si modifica un header, è necessario ricompilare ogni sorgente che lo include, perché il testo dell'header fa parte di ciascuno di essi.
/* edited math_utils.c only */
gcc -c math_utils.c
gcc main.o math_utils.o -o appAutomatizzare con make
Digitare i comandi manualmente diventa noioso. Un Makefile registra le regole e ricostruisce solo ciò che è cambiato.
Questo esempio minimale collega due oggetti in app; make tiene traccia dei timestamp dei file per decidere cosa ricompilare.
app: main.o math_utils.o
gcc main.o math_utils.o -o app
main.o: main.c math_utils.h
gcc -c main.cRiepilogo completo della build
Ecco l'intero flusso per un piccolo progetto, dai file oggetto al programma finito con gli avvisi abilitati.
Compili ogni sorgente e poi colleghi gli oggetti. Esegua il risultato per verificare che funzioni dall'inizio alla fine.
gcc -Wall -c main.c
gcc -Wall -c math_utils.c
gcc main.o math_utils.o -o app
./appVerifica rapida
Verifichi la propria comprensione del processo di build con più file.
Riepilogo
Ha imparato a compilare ogni file .c in un oggetto con -c e poi a collegare gli oggetti in un programma. Utilizzi -Wall e -I rispettivamente per gli avvisi e i percorsi degli include.
I riferimenti non definiti indicano che manca un oggetto in fase di collegamento. Strumenti come make automatizzano la ricostruzione del solo codice modificato.
Domande Frequenti
La lezione «Compilare più file» è gratuita?
Sì — il testo completo di «Compilare più file» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C Academy, passa a CoddyKit PRO. Il corso C Academy include 4 lezioni in totale.
Cosa imparerò in «Compilare più file»?
Costruisca un programma composto da più file. Eserciti C Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C Academy?
Non è richiesta alcuna esperienza precedente. C Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Compilare più file»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C Academy?
Sì. Ogni lezione C Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- File header e sorgente
- Guardie di inclusione
- extern e linkage
- Compilare più file