Domanda
Supporta di avere un programma C incluso in alcuni file e alcuni sono composti da altri, quindi come segue:
----------------------------------------
File | Included files
----------------------------------------
main.c | stdio.h, table.h
----------------------------------------
list.c | list.h
----------------------------------------
symbol.c | symbol.h
----------------------------------------
table.c | table.h
----------------------------------------
table.h | symbol.h, list.h
----------------------------------------
per favore aiutami a creare un makefile, grazie mille! Questo è il mio Makefile, ma c'è un problema? chi può eseguire il debug di questi problemi, grazie!
hello: main.o table.o
gcc main.o table.o -o hello
main.o: main.c table.h
gcc -c main.c
table.o: table.c table.h
gcc -c table.c
symbol.o: symbol.c symbol.h
gcc -c symbol.c
list.o: list.c list.h
gcc -c list.c
clean:
rm hello *.o
Soluzione
Ecco un inizio, non esattamente come lo farebbe un professionista, ma buono per un livello principiante:
hello: main.o list.o symbol.o table.o
gcc -o hello main.o list.o symbol.o table.o
main.o: main.c table.h symbol.h list.h
gcc -c -o main.o main.c
list.o: list.c list.h
gcc -c -o list.o list.c
symbol.o: symbol.c symbol.h
gcc -c -o symbol.o symbol.c
table.o: table.c table.h symbol.h list.h
gcc -c -o table.o table.c
clean:
rm hello *.o
Il problema specifico con il tuo makefile dato è che non stai collegando in tutti i file oggetto. Perché main.c
include table.h
e table.h
include symbol.h
e l'elenco . h
, quasi sicuramente il tuo programma dovrà collegare symbol.o
e list.o
.
È anche buona norma seguire le dipendenze delle intestazioni (ad es. main.o
dipende da table.h
e symbol.h /list.h
perché table.h
dipende da questi due) - questo perché non c'è " pulito " modo per ottenere un file intermedio per le dipendenze dell'intestazione.
E raramente metti le intestazioni standard nei file per creare semplicemente perché non dovrebbero cambiare - se lo fanno (nuovo compilatore), pulisci e rendi fresco.