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
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top