[Tech] header C
Francesco Poli
frx@firenze.linux.it
Mer 31 Dic 2003 18:36:58 CET
On Wed, 31 Dec 2003 13:50:07 +0100 Llewlyn wrote:
> --------------------- 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 ---------------------------
Ci sono alcune cose che andrebbero migliorate, in questo semplice
Makefile ipotetico (non prendere queste osservazioni come attacchi
personali, le dico a beneficio di Valerio):
* ti sei dimenticato l'opzione -c per generare i file oggetto e inoltre
non c'e` bisogno di specificare il nome del file di output, se da
pippo.c vuoi ottenere pippo.o:
$ gcc -c pippo.c
* meglio porre l'accento sul fatto che prima di ogni comando deve essere
inserito un carattere di tabulazione (tasto Tab) e non alcuni spazi
bianchi (come potrebbe sembrare):
target: dependency dependency
<TAB>command
<TAB>command
<TAB>[...]
* se chiami all un target il cui comando genera un file app, il comando
verra` rieseguito ad ogni volta che l'utente da` il comando
$ make all
anche se il file app esiste ed e` gia` aggiornato.
Meglio chiamarlo app e dichiarare esplicitamente .PHONY i target che
davvero corrispondono a comandi che vanno rieseguiti sempre ad ogni
chiamata...
* anche gli altri target vanno chiamati come i file generati (main.o,
mod1.o, ...) altrimenti make non sa come soddisfare le dipendenze di
del primo target; anzi lo sa, ma non segue le regole scritte da te
(vedi dopo)
* i comandi tipici come la compilazione di pippo.c per ottenere pippo.o
possono essere inferiti da make: non importa specificarli
* probabilmente main.c include anche mod1.h e mod2.h, quindi main.o
dipende anche da questi: meglio farlo sapere anche a make...
--------------------- cut ---------------------------
app: main.o mod1.o mod2.o
<TAB>gcc -o app main.o mod1.o mod2.o
main.o: main.c mod1.h mod2.h
mod1.o: mod1.c mod1.h
mod2.o: mod2.c mod2.h
--------------------- cut ---------------------------
Spero di essere stato utile... :)
--
| GnuPG Key ID = DD6DFCF4 | You're compiling a program
Francesco | Key fingerprint = | and, all of a sudden, boom!
Poli | C979 F34B 27CE 5CD8 DC12 | -- from APT HOWTO,
| 31B5 78F4 279B DD6D FCF4 | version 1.8.0
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome: non disponibile
Tipo: application/pgp-signature
Dimensione: 189 bytes
Descrizione: non disponibile
URL: <http://lists.linux.it/pipermail/flug-tech/attachments/20031231/836586b5/attachment.pgp>
Maggiori informazioni sulla lista
flug-tech