|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Caserta
Messaggi: 1056
|
[C++] Modularizzazione e makefile
Ho un programma che si compone di 6 files.
main.cpp contiene la funzione main e include tutti gli header persona.cpp contiene la definizioni delle funzioni dichiarate in persona.h, quindi include persona.h studente.cpp contiene le definizioni delle funzioni dichiarate in studente.h, quindi include studente.h persona.h contiene la dichiarazione della classe persona e le relative definizioni di funzioni studente.h contiene la dichiarazione della classe studente, le relative definizioni di funzioni ed essendo derivata da persona include persona.h pila.h contiene la dichiarazione della classe pila, la dichiarazione delle relative funzioni, ed essendo una classe template, anche le definizioni. Ammesso che sia corretta la suddetta impostazione progettuale, vorrei dei consigli sul makefile. Attualmente è il seguente Codice:
CC=g++ SRC=Main.cpp Persona.cpp Studente.cpp HDS=Pila.h Persona.h Studente.h OBJ=Main.o Persona.o Studente.o EXE=yuri $(EXE):$(OBJ) $(CC) -o $(EXE) $(OBJ) $(OBJ):$(SRC) $(HDS) $(CC) -c $(SRC) clean: rm $(OBJ) $(EXE) Il problema è che così impostato ogni volta che modifico qualcosa in qualsiasi file, mi si ricompilano tutti i moduli. Penso che per com'è impostato il programma possa rendere il makefile più intelligente (nel senso che ricompili soltanto il necessario). Il sorgente completo -> https://rapidshare.com/files/323752...tto_persona.zip Ultima modifica di masteryuri : 08-06-2011 alle 14:54. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Caserta
Messaggi: 1056
|
edit*
Ultima modifica di masteryuri : 08-06-2011 alle 14:56. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
Codice:
CXX = g++ SRC = Main.cpp Persona.cpp Studente.cpp HDS = Pila.h Persona.h Studente.h OBJ = Main.o Persona.o Studente.o EXE = yuri $(EXE) : $(OBJ) $(CXX) -o $(EXE) $(OBJ) %.o : %.cpp %.h $(CXX) -o $@ -c $^ clean: rm $(OBJ) $(EXE) |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Caserta
Messaggi: 1056
|
non è che per caso puoi spiegarmi la sintassi che hai usato e cosa comporta nel dare il make?
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
prima di tutto leggendo meglio vedo che non basta quella regola, ti servono regole specifiche per i file che hanno solo il file .h (come pila che immagino sia una classe template) o solo il file cpp come main
comunque, per quanto riguarda la sintassi Codice:
%.o : %.cpp %.h $(CXX) -o $@ -c $^ % è una specie di wildcard, al posto di % può esserci una stringa qualsiasi, quindi se c'è da costruire un qualsiasi file *.o la regola viene attivata invece sulle dipendenze % si sostituisce con quello che sta al posto del target, faccio un esempio: fai make, per costruire yuri hai bisogno di Persona.o e gli altri oggetti %.o viene "riconosciuta" come regola per costruire Persona.o e le dipendenze diventano Persona.h e Persona.cpp quindi viene compilato di nuovo l'oggetto solo se i file Persona.cpp o Persona.h sono stati modificati.. $@ corrisponde al target e $^ alle dipendenze, dunque $(CXX) -o $@ -c $^ diventa g++ -o Persona.o -c Persona.cpp Persona.h |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Caserta
Messaggi: 1056
|
Grazie
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:27.


















