PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eigenes makefile



Jaipur
16-02-2002, 19:05
Hi,

ich habe 4 C Quellcode Dateien + main.c:
main.c baum.c queue.c stack.c

und 3 Headerdateien:
baum.h stack.h queue.h

Die Datei stack.c inkludiert stack.h und baum.h
Die Datei queue.c inkludiert queue.h und baum.h
Die Datei baum.c inkludiert baum.h queue.h stack.h

Mein makefile:


baum: main.o baum.o queue.o stack.o
gcc -o baum main.o baum.o queue.o stack.o

main.o: main.c
gcc -c main.c

baum.o: baum.c
gcc -c baum.c

queue.o: queue.c
gcc -c queue.c

stack.o: stack.c
gcc -c stack.c

Meine Frage:
Gehören die Headerdateien auch in das makefile? Wenn ja wohin?
Ist mein makefile eigentlich korrekt? Zumindest funktioniert es :)

geronet
16-02-2002, 19:39
Wenn es funktioniert dann ist es doch super..

Du kannst ja noch so was reinschrifteln:

gcc -c main.c -o main.o


Es fehlt halt noch "make install" usw.. aber ist nicht so wichtig :p

Grüsse, Stefan

thommy
18-02-2002, 09:14
Headerdateien gehören ins Makefile, da die C-Dateien von diesen abhängen. Anbei findest Du ein Gerüst, wie ein Makefile aufgebaut sein kann, damit Abhängigkeiten automatisch mittels 'make depend' aufgelöst werden können. Befinden sich alle C-Dateien Deines Projekts in einem Verzeichnis, so sollte die Aufruffolge von:

make depend
make

Deine Anwendung sauber basteln. 'make depend' ist nachfolgend nur erneut auszuführen, wenn eine neue Datei zum Projekt hinzugefügt wurde.

Der Code:


CC = /usr/bin/gcc
CCFLAGS =
SOURCE = $(wildcard *.c)
OBJECTS = $(SOURCE:%.c=%.o)
RM = rm -f

baum: $(OBJECTS)
$(CC) -o baum $(OBJECTS)

%.o: %.c Makefile
$(CC) $(CCFLAGS) $< -o $@

depend:
makedepend -- $(CCFLAGS) -- $(SOURCE)

clean:
@$(RM) -f $(OBJECTS)


Den Nutzen der Verwendung von Variablen muss ich wohl nicht erläutern;-)

Gruß, Thomas

TheDodger
18-02-2002, 10:25
Alternativ kann man auch tmake einsetzen ... allerdings weiß ich jetzt nicht, wie das da mit den Abhängigkeiten geregelt wird ...
Die Makefiles, die qmake bastelt (qmake basiert auf tmake) laufen jedenfalls sauber.