[linux-l] Re: Makefile

JSC JSC at jsc.tfh-berlin.de
Do Nov 28 22:33:05 CET 2002


On Thu, Nov 28, 2002 at 09:49:17PM +0100, Olaf Radicke wrote:
[..]
> Zur Zeit sieht mein Makefile so aus:
> ----------------| schnipp |---------------------------------------
> CC = gcc
> 
> CFLAGS = -Wall -ggdb -I/usr/include/glib-1.2 -I/usr/lib/glib/include 
> -I/usr/X11R6/include -L/usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmodule 
> -lglib -ldl -lXi -lXext -lX11 -lm
> # oder alternativ =
> #CFLAGS = -Wall -ggdb `gtk-config --cflags --libs`
> 
ich wuerde die -L und -l parameter rausnehmen, da diese zum linken und
nicht zum compilieren gebraucht werden. statt dessen z.b. LDFLAGS oder
LIBS verwenden:
LDFLAGS=-L/usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl \
        -lXi -lXext -lX11 -lm
und $(LIBS) in den link-aufrufen verwenden.

> opben-risk: Main.o Bild_laden.o Daten_laden.o Spieler.o Spielleitung.o ol_info.o
> 
> 	$(CC)  Main.o Bild_laden.o Daten_laden.o Spieler.o Spielleitung.o ol_info.o -o open-risk 
> 
die abhaengigkeiten sind ok, den linker aufruf wuerde ich aber so
schreiben:

opben-risk: Main.o Bild_laden.o Daten_laden.o Spieler.o Spielleitung.o ol_info.o
	$(CC)  -o $@ $(LDFLAGS) $^

> 
> open-risk.o: Main.c Bild_laden.h Daten_laden.h Spieler.h 
> Spielleitung.h ol_info.h
> 	$(CC) $(CFLAGS) -c Main.c
> 
> Bild_laden.o: Bild_laden.c Bild_laden.h
> 	$(CC) $(CFLAGS) -c  Bild_laden.c
die abhaengigkeiten sind sauberer zu definieren. das object file haengt zwar von
den .c files ab, aber nicht von .h files. die .c files haengen von den .h files
ab. da dann fuer ein zu generierendes binary nur .o files in den direkten
abhaengigkeiten stehen, kann man alle automatisch im linken aufruf uebernehmen.
fuer .h files wuerde das nicht funktionieren.

Bild_laden.c: Bild_laden.h
Bild_laden.o: Bild_laden.c
	$(CC) $(CFLAGS) -c $^

gnumake weiss, wenn die datei Bild_laden.o benoetigt wird, dass man diese aus
Bild_laden.c generieren kann. die regel:

.c.o:
	$(CC) $(CFLAGS) -c -o $@ $<

sorgt dafuer. kann man sich die definition der abhaengigkeit:

Bild_laden.o: Bild_laden.c

also sparen. dies funktioniert nicht, wenn man den namen vom .c file zum .o file
aendert. in deinem beispiel durch:

open-risk.o: Main.c

ausgedrueckt. ich finde dies nicht so elegant, es geht natuerlich
auch so.

die verkuerzte schreibweise sieht zwar kryptisch aus und funktioniert m.e. nur
mit gnumake, man vermeidet aber das doppelte auffuehren irgendwelcher files.
das kryptische erhoeht also die uebersichtlichkeit ...

ich hoffe, ein paar anregungen gegeben zu haben. in dieser mail ist
sicherlich nicht alles korrekt, da ich es aus dem kopf vorgekramt habe.
das debugging sollte aber kein problem sein, da die generischen kommandos
beim ausfuehren ja im klartext zu sehen sind.

SEE ALSO:
	info make

gruss
Jens



Mehr Informationen über die Mailingliste linux-l