Pagina 1 di 1

Makefile [risolto]

Inviato: dom 13 gen 2008, 10:14
da Dani
Sto cercando di capire come funziona il make ma non ne vengo fuori...
Ad esempio ho tre file .c, contenente il main e i corpi delle funzioni, ed un solo header file, contenente i prototipi di tutte le funzioni e qualcos'altro.
Dal main, in file1.c, chiamo una funzione, presente il file2.c. Da quest'ultima funzione ne chiamo un'altra in file3.c...
Dopo aver dato make pero' ottengo i classici errori "undefined reference to..."
Nel makefile scrivo qualcosa tipo:

Codice: Seleziona tutto

programma : file1.o file2.o file3.o
          cc -o programma file1.o file2.o file3.o

file1.o  : file1.c header.h
          cc file1.c -o file1.o
file2.o  : file2.c header.h
          cc file2.c -o file2.o
file3.o   : file3.c header.h
          cc file3.c -o file3.o
Dov'è che sbaglio :?:

Re: Makefile

Inviato: dom 13 gen 2008, 12:38
da puzuma
make guida solo l'ordine con cui esegui i vari comandi non ne sa niente delle dipendenze c (infatti può essere usato per qualsiasi compito non solo la compilazione).

quindi se hai messo tutte le dichiarazioni di funzioni in header.h devi includere questo header nei vari file[1,2,3].c e scrivere il make così:

Codice: Seleziona tutto

programma : file1.o file2.o file3.o
          cc -o programma file1.o file2.o file3.o

file1.o  : 
          cc file1.c -o file1.o
file2.o  : 
          cc file2.c -o file2.o
file3.o   : 
          cc file3.c -o file3.o
se ottieni un errore non è make che sbaglia ma il compilatore, quindi guarda nell'output di make chi sta sbagliando ed esegui il comando a mano, sistema l'errore e poi riprova a far girare make

Re: Makefile

Inviato: dom 13 gen 2008, 13:05
da Dani
puzuma ha scritto: quindi se hai messo tutte le dichiarazioni di funzioni in header.h devi includere questo header nei vari file[1,2,3].c e scrivere il make così:
E' quello che ho fatto, ma make continua a dire "undefined reference to ..."
Invece se provo a compilare così:

Codice: Seleziona tutto

gcc -o programma file1.c file2.c file3.c
tutto fila liscio !

Re: Makefile

Inviato: dom 13 gen 2008, 13:32
da gallows

Codice: Seleziona tutto

file1.o  : file1.c header.h
          cc file1.c -o file1.o
Fai partire il linker così, devi usare la flag "-c".

Re: Makefile [risolto]

Inviato: dom 13 gen 2008, 14:11
da Dani
Ok aggiungendo il flag -c compila, grazie.
Già che ci sono colgo l'occasione per chiedere un parere sul metodo di scrittura del codice...Come ho scritto prima capita nel sorgente di rimbalzare da un file all'altro; ad esempio la funzione x nel primo file chiama la funzione y del secondo. Questa a sua volta chiama altre funzioni, magari in altri files...E' una cattiva pratica di programmazione la mia ?