Newsgroup: it.comp.lang.c
Titolo: Re: Makefile, sono alle prime armi...

 
La mia esperienza personale mi dice che e' meglio avere tutti i sorgenti di un 'modulo' nella stessa directory. Se il progetto non  e' grosso addirittura vari moduli nella stessa directory vanno anche bene.
Io personalmente metto tutti i .h, .c, .o, makefile etc. nella stessa directory, proprio perche' e' l'estensione che li differenzia a livello  linea di comando, e se usi un IDE, non fa differenza se sono o meno nelle stesse directory.
Per quanto riguarda le dipendenze, possono essere generate in automatico anche quelle.
Poi ci sono l'accoppiata autoconf/automake che sono molto utili per poter avere lo stesso progetto su piu' piattaforme.
Queste sono solo idee, poi sta a te valutare se e' il caso o meno.

 multiplatform, e mi distoglierebbe dal resto del lavoro)
Nel senso che tu userai solo macchine con la medesima installzione del medesimo sistema operativo?
Vai sulla macchina del vicino, che ha, non so, una versione diversa di gmake, o ha lex diverso installato, e il tuo Makefile diventa difficile da manutenere.
Allora devi crearti degli shell scripts per identificare che risorse abbia etc.
Gli Autotools sono  stati creati apposta cosi' uno prende il tuo 'prodotto', digita ./configure && make && make install e tutto e' ok...

 Non tiratemi troppi pomodori marci, please :D
Non è facile dare una risposta al tuo quesito perche' sarebbe 
necessaria una visione globale del progetto.  Io posso solo suggerirti 
quella che è la mia idea e che ho applicato in tanti progetti (anche 
molto grossi).
/progetto/
	/* directory che contirne il progetto suddiviso in moduli */
         Makefile del progetto
         files per autotools se applicabili
         files di ausilio all'installazione e la configurazione
         docs/   	/* directory per la documentazione */
                 Makefile	/* se necessario */
                 files della documentazione
         common/		/* directory per una libreria */
                 Makefile
                 files .c per generare una libreria
                 files .h se usati esclusivamente dai .c in questa dir.
		files .o e libreria (.a oppure .so) generati
         include/
                /* diretory per le include comuni */
                files .h comuni a piu` di un modulo e/o alla libreria
                Make.def /* parti di Makefile comuni ed includibili */
         src1/   /* directory per il modulo */
                 Makefile
                files .c per generare il modulo
                files .h se usati esclusivamente dai .c in questa dir.
                files .o ed eseguibile generati in compilazione
         src2/   /* directory per il modulo */
                Makefile
                files .c per generare il modulo
                files .h se usati esclusivamente dai .c in questa dir.
                files .o ed eseguibile generati in compilazione
I files prodotti dalla compilazione (objs, libreria, eseguibile) 
vengono generati all'interno della rispettiva directory (è molto più 
facile scrivere i Makefiles :-) ).  Il Makefile nella directory di 
progetto è so;o un driver che permette di preparare l'amiente e che 
attiva i Makefiles delle singole directory.
Anche se ti interessa per il momento fare solo un ambiente (o 
compilazioni) di test il mio consiglio è di strutturare fin 
dall'inizio l'ambiente in modo corretto aggiungendo eventualmente una 
directory specifica per il modulo test.
Questa directory conterrà eventuali file .c e .h e/o scripts necessari 
per il testing ed il Makefile per compilarli, ma dovrà pescare i 
moduli (od anche i soli oggetti) dalle altre directory.  Queste quindi 
dovranno essere processate prima della directory di test ed il tutto 
gestito nel Makefile della directory di progetto.
Come esempio potresti guardare come è organizzato il progetto per LPD 
al link 
http://giovanni.homelinux.net/development/index.html
È specifico per Minix, con un 'make' non GNU e quindi forse trovi 
qualche differenza, ma penso che possa fornirti indicazioni utili.
Non è molto complesso (almeno rispetto a certi progetti in cui ho 
lavorato) ma probabilmente non e` molto lontano da quanto vuoi fare tu.
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   < 
http://giovanni.homelinux.net/
 >

 miei colleghi di corso..)
Io ti consiglio *comunque* cmake. E' di per se piu' semplice di Make,
per lo meno dal mio punto di vista. Risolve *anche* i problemi che vanno
a risolvere gli autotools (e a mio avviso li risolve pure meglio) *e* e'
in grado di generare tanto Makefiles quanto progetti dei piu' diffusi
IDE.
Ah, quando dico "semplice", intendo *semplice*.
-- 
-riko