PDA

Visualizza la versione completa : [C - Make] Makefile non va a buon fine


qotsa
15-06-2010, 17:47
Sto facendo un progetto per l'università e ho iniziato ad usare il Makefile per agevolare la compilazione di tutti i fogli.
Premetto che non tutto del makefile mi è chiaro, specialmente la parte in cui si parla della data di ultima scrittura dei file che influirebbe sul makefile stesso.

vi posto il makefile:

CFLAGS = -Wall -g
MON_OBJ = obj/vmemMon.o obj/gest_comandi.o
VMEMD_OBJ = obj/gestione_Mem.o obj/frameMem.o obj/gestione_fifo
LIBVMEM_OBJ = obj/gestione_fifo.o obj/libvmem.o

LIB_GCOM = inc/gest_comandi.h
LIB_PAGE = inc/page.h
LIB_MACRO = inc/macro.h
LIB_VMEM = inc/libvmem.h
LIB_IND = inc/indirizzi.h
LIB_GSWAP = inc/gestione_swap.h
LIB_GMEM = inc/gestione_Mem.h
LIB_GFILE = inc/gestione_file.h
LIB_GFIFO = inc/gestione_fifo.h
LIB_FRAMEMEM = inc/frameMem.h

EXE = bin/vmemMon bin/vmemd lib/libvmem.a

all: $(EXE)

bin/vmemMon: $(MON_OBJ) lib/libvmem.a
cc -o bin/vmemMon $(MON_OBJ) -Llib/ -lvmem

lib/libvmem.a: src/libvmem.o $(LIBVMEM_OBJ)
ar rcs lib/libvmem.a $^

obj/libvmem.o: src/libvmem.c $(LIB_VMEM) $(LIB_GFIFO)
cc $(CFLAGS) -c src/libvmem.c -o $@

obj/vmemMon.o: src/vmemMon.c $(LIB_GCOM)
cc $(CFLAGS) -c src/vmemMon.c -o $@

obj/gestione_fifo.o: src/gestione_fifo.c $(LIB_GFIFO) $(LIB_GMEM) $(LIB_MACRO)
cc $(CFLAGS) -c src/gestione_fifo.c -o $@

obj/gestione_Mem.o: src/gestione_Mem.c $(LIB_IND) $(LIB_GSWAP) $(LIB_VMEM) $(LIB_GMEM)
cc $(CFLAGS) -c src/gestione_Mem.c -o $@

obj/gestione_swap.o: src/gestione_swap.c $(LIB_FRAMEMEM)
cc $(CFLAGS) -c src/gestione_swap.c -o $@

obj/page.o: src/page.c $(LIB_FRAMEMEM) $(LIB_PAGE) $(LIB_GFILE) $(LIB_MACRO)
cc $(CFLAGS) -c src/page.c -o $@

obj/gestione_file.o: src/gestione_file.c $(LIB_GFILE)
cc $(CFLAGS) -c src/gestione_file.c -o $@

obj/frameMem.o: src/frameMem.c $(LIB_FRAMEMEM) $(LIB_IND)
cc $(CFLAGS) -c src/frameMem.c -o $@

obj/indirizzi.o: src/indirizzi.c $(LIB_MACRO)
cc $(CFLAGS) -c src/indirizzi.c -o $@

obj/gest_comandi.o: src/gest_comandi.c $(LIB_GCOM)
cc $(CFLAGS) -c src/gest_comandi.c -o $@

bin/vmemd: $(VMEMD_OBJ)
cc $(CFLAGS) $^ -o $@

.PHONY: clean install

install:
make all

clean:
rm -f obj/*.o bin/* lib/*

quando avvio il make mi da sempre questo errore e le funzioni che dice di non trovare sono scritte da me e incluse con #include"../inc/libreria.h"
per altre librerie non ha riscontrato errori ma per questa si!!

vi posto l'errore:

make all
make[1]: ingresso nella directory «/home/moro/Scrivania/progetto»
cc -Wall -g -c src/vmemMon.c -o obj/vmemMon.o
cc -Wall -g -c src/gest_comandi.c -o obj/gest_comandi.o
cc -Wall -g -c src/gestione_fifo.c -o obj/gestione_fifo.o
cc -Wall -g -c src/libvmem.c -o obj/libvmem.o
ar rcs lib/libvmem.a src/libvmem.o obj/gestione_fifo.o obj/libvmem.o
cc -o bin/vmemMon obj/vmemMon.o obj/gest_comandi.o -Llib/ -lvmem
cc -Wall -g -c src/gestione_Mem.c -o obj/gestione_Mem.o
cc -Wall -g -c src/frameMem.c -o obj/frameMem.o
cc obj/gestione_fifo.o -o obj/gestione_fifo
/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/crt1.o: In function `_start':
/build/buildd/eglibc-2.10.1/csu/../sysdeps/i386/elf/start.S:115: undefined reference to `main'
obj/gestione_fifo.o: In function `get_request_server':
/home/moro/Scrivania/progetto/src/gestione_fifo.c:215: undefined reference to `create'
/home/moro/Scrivania/progetto/src/gestione_fifo.c:222: undefined reference to `chk_pid'
/home/moro/Scrivania/progetto/src/gestione_fifo.c:229: undefined reference to `get'
/home/moro/Scrivania/progetto/src/gestione_fifo.c:236: undefined reference to `put'
/home/moro/Scrivania/progetto/src/gestione_fifo.c:249: undefined reference to `chk'
collect2: ld returned 1 exit status
make[1]: *** [obj/gestione_fifo]
Errore 1 make[1]: uscita dalla directory «/home/moro/Scrivania/progetto»
make: *** [install] Errore 2


Sapete dirmi se c'è un errore nell'uso del makefile ?!?
Grazie mille. ciao!

frankitt
16-06-2010, 18:22
In alcuni errori si vede che non linki bene i prototipi di funzione, nel makefile tra l' altro scrivi
VMEMD_OBJ = obj/gestione_Mem.o obj/frameMem.o obj/gestione_fifo
ma facci caso, gestione_fifo non ha il .o alla fine.

Ci sono errori banali quanto fondamentali, prova a compilare a mano i vari file, giusto per vedere se può dipendere dal makefile. Un altro problema è che poi è difficile correggere tutto senza avere tra le mani il progetto!!!

Ciao Sateam!

xnavigator
17-06-2010, 00:44
non ti conviene usare un IDE?

qotsa
18-06-2010, 12:26
mmm infatti il la mancanza del .o ha risolto un po di cose...
per ora va tutto bene ma in seguito aggiungerò altri target quindi le cose potrebbero ricomplicarsi!


un IDE?? non so bene cosa sia ma cmq il progetto prevede l'uso del make e non posso cambiare!
cmq grazie!

Loading