[Tech] header C

Llewlyn lewlin@prato.linux.it
Mer 31 Dic 2003 13:50:07 CET


On Wednesday 31 December 2003 11:12, Valerio Montagnani wrote:
> Se al contrario
> uso la direttiva include con i nomi dei moduli con estenzione .c , funziona
> tutto.
>
> Che cosa sto sbagliando?

Non sbagli niente, infatti devi "dire" al compilatore che ci sono altri 
file .c di cui ha bisogno, però ci sono diversi modi x "dirglielo", non 
necessariamente includendo il codice con una direttiva.

Per esempio, supponiamo main.c come file principale, e mod1.c mod1.h come 
primo modulino e mod2.c mod2.h come secondo.

Ogni file modx.c ha una direttiva iniziale che include il suo header, 
contenente definizioni e ogni altra roba che serve, basta lanciare un

gcc main.c mod1.c mod2.c

Per compilare la funzione main utilizzando tutte le subroutines (e altro) 
presenti nei vari files.

Oppure potresti scrivere un makefile per organizzare in modo ordinato le 
dipendenze, ad esempio:

--------------------- cut ---------------------------
all : main.o mod1.o mod2.o
        gcc -o app main.o mod1.o mod2.o
                                                                                
main : main.c
        gcc main.c -o main.o
                                                                                
mod1 : mod1.c mod1.h
        gcc mod1.c -o mod1.o
                                                                                
mod2 : mod2.c mod2.h
        gcc mod2.c -o mod2.o
--------------------- cut ---------------------------

In questo modo compili singolarmente ciascun file sorgente, dopodichè generi 
l'applicazione usando i vari file oggetto. La sintassi è del tipo

target : dependency dependency
	command 
	command
	[...]

Per capire come scrivere efficacemente makefile cmq, vai sul GNU Make Manual 
(ing) http://www.gnu.org/manual/make-3.79.1/html_chapter/make_toc.html

---
Tommaso




Maggiori informazioni sulla lista flug-tech