Newsgroup: it.comp.os.linux.development
Titolo: compilazione sorgenti c++

Ho questa situazione:
### main.C #################################
        #include "pre.inc"
        ...
        codice del main.C
        ...
        #include "post.inc"
### pre.inc ################################
        #include file_1.h
        #include file_2.h
        ...
        #include file_n.h
        #include my_file_1.h
        ...
        #include my_file_m.h
### post.inc ################################
        #include file_1.C
        #include file_2.C
        ...
        #include file_n.C
        #include my_file1.C
        ...
        #include my_filem.C
(uso il g++ sotto linux)
Tenendo presente che:
1)I sorgenti non sono miei io devo aggiungere delle funzionalità aggiungendo      
                              file e facendo piccole modifiche ai sorgenti 
già presenti.
2)Un file .h ha sia la dichirazione che la definizione di classe (non 
chiedetemi perchè non hanno usato l'estensione cpp)
3)Il makefile non esiste poichè viene compilato semplicemente il main.C e 
tutto vien da se.
La domanda è:
Come posso strutturare un Makefile per compilare in modo tale da poter 
rispettare le modifiche fatte nei vari file (l'ovvia utilità del make) e da 
poter fare il debug nei singoli file?
Io ho provato creando un makefile, ma dividendo i vari file oggetto in 
singole compilazioni (per poter fare il debug richiamando -ggdb su ogni 
comando di compilazione (credo sia l'unico modo, vero?...ditemi di no)) ho 
il problema che quando compilo "file1.C" non vede le dichiarazioni che sono 
nel "file2.h"
Come posso ottenere ciò?
Ciao e grazie.
-- 
__________________________________
"Ama e fai c'ho che vuoi".... 
__________________________________

 sono nel "file2.h"
Semplicemente devi aggiungere in file1.C #include "file2.h" all'inizio. La
strutturazione corretta è questa:
file1.C, file2.C ...:
ognuno contiene solo definizioni. Ognuno include i file.h di cui ha
bisogno.(Usa l'estensione .cpp, preferibilmente. E' "un pochino" più
diffusa e cross-platform, aka funziona su Winzozz; e magari qualcuno non
sa la differenza tra .c e .C)
i file1..n.h
contengono solo dichiarazioni. Occhio che quasi di certo otterrai in fase
di linking delle duplicate definition: le definizioni devono stare SOLO
nei file .cpp, se no, quando il .h viene incluso da due parti le sue
definizioni vanno in entrambi i .o e poi danno conflitto. Nota che per i
campi static, oltre alla dichiarazione all'interno della classe ci vuole
una definizione in un .cpp: static NomeClasse::nomecampo; o qualcosa del
genere(non programmo tantissimo in C++ quindi potrei sbagliare).
Per il makefile, una volta ristrutturato, procedi in maniera normale.
Ricordati di mettere tra le dipendenze anche i file .h e di usare regole
generali(del tipo %.o:%.c ...) con variabili in modo da cambiare i file di
debug facilmente.
Ciao
-- 
cat <<EOF
Paolo Giarrusso, aka Blaisorblade(togliere solo REMOVEONLYTHIS per rispondere)
Kernel 2.4.19 on an i686; Linux registered user n. 292729
EOF

 
ciao!


 incluso poi il make mi dice che nomeprog is up to date.
Le dipendenze non se le fila lui, gliele metti tu:
nomeprog: file1.c file2.c ...........
make non sa il C, lo sai tu che quel programma dipende da quei file. E
questo vale anche per gli include interni al progetto: devi aggiungere tu
la dipendenza.


 nel "file2.h"
Semplicemente devi aggiungere in file1.C #include "file2.h" all'inizio. La
strutturazione corretta è questa:
file1.C, file2.C ...:
ognuno contiene solo definizioni. Ognuno include i file.h di cui ha
bisogno.(Usa l'estensione .cpp, preferibilmente. E' "un pochino" più
diffusa e cross-platform, aka funziona su Winzozz; e magari qualcuno non
sa la differenza tra .c e .C)
i file1..n.h
contengono solo dichiarazioni. Occhio che quasi di certo otterrai in fase
di linking delle duplicate definition: le definizioni devono stare SOLO
nei file .cpp, se no, quando il .h viene incluso da due parti le sue
definizioni vanno in entrambi i .o e poi danno conflitto.
Nota che per i campi static, oltre alla dichiarazione all'interno della
classe ci vuole una definizione in un .cpp:
static NomeClasse::nomecampo;
o qualcosa del genere(non programmo tantissimo in C++ quindi potrei
sbagliare).
Per il makefile, una volta ristrutturato, procedi in maniera normale.
Ricordati di mettere tra le dipendenze anche i file .h e di usare regole
generali(del tipo %.o:%.c ...) con variabili in modo da cambiare i file di
debug facilmente.
Ciao
