Ciao a tutti,
eccomi a chiedere info su quel che dovrebbe essere la base, eppur così chiaro non è.
Ho provato a fare una ricerca se l'argomento era già stato trattato, ma non ho trovato niente, così come le guide, il manuale di GNU e i vari tutorial che ho trovato mi hanno lasciato perplesso (evidentemente son gnucco)
Finito il programma, mi sto dedicando a migliorare il makefile. Prima scrivevo una versione estremamente rudimentale che farebbe inorridire ogni purista (praticamente ogni volta ricompilava tutti gli oggetti), adesso, avendo diversi file da compilare ogni volta (sono circa 8 .cpp) ho deciso di imparare a far le cose fatte bene.
Questo è il mio codice:
CC: =g++
GRAPHLIBS: -lglut -lGL -lGLU
MY_CLASSES.O: graphic.o income.o interface.o keyboard.o noteinfo.o opening.o record.o savenload.o
MY_CLASSES.H: graphic.h income.h interface.h keyboard.h noteinfo.h opening.h record.h savenload.h
graphic.o: graphic.cpp $(MY_CLASSES.H);
$(CC) -c graphic.cpp -o graphic.o
tastiera_main.o: tastiera_main.cpp $(MY_CLASSES.H);
$(CC) -c tastiera_main.cpp -o tastiera_main.o
compila: $(MY_CLASSES.O) tastiera_main.o
$(CC) tastiera_main.o $(MY_CLASSES.O) $(GRAPHLIBS) -o compiled
esegui: tastiera_main
Allora, ho un po' di punti che mi piacerebbe capire:
-Al momento i singoli oggetti me li crea (nel codice riportato ho tenuto solo graphic.o e tastiera_main.o per questioni di leggibilità sul forum, nel makefile che ho scritto ci sono quelli relativi a tutte le classi), quando vado a dire
make compila
invece compare una valangata di errori 'undefined reference' in tastiera_main.o... (se compilo senza makefile funziona)
Evidentemente c'è qualcosa che non va, eppure mi sembra di avergli passato i file che deve compilare (quelli contenuti in $(MYCLASSES.O) e tastiera_main.o). Che erroraccio sto facendo?
-che utilità ha scrivere $(CC) al posto di g++? Ho visto che l'oggetto lo crea anche se commento la prima riga del makefile
#CC: g++
, quindi comincio a pensare che quella dichiarazione iniziale sia inutile.
-perchè se compilo senza makefile da g++ non devo includere i .h, e nel makefile per creare i signoli oggetti sì? Con g++ io scrivo
g++ funzioni_varie.cpp main.cpp -o main
.
Se mi vengono in mente altre cose continuerei a chiedere qui, spero non sia da considerarsi troppo "didattica" la discussione.
Grazie in anticipo!