Stefans Wiki



Makefile

Mit Hilfe des Programmes make und einem Makefile ist es möglich den Compiler- und Link-Prozeß, speziell wenn man mehrere Quelldateien hat, sehr zu vereinfachen. Ein einfaches make all in der Shell reicht dann aus um das komplette Programm mit allen Abhängigkeiten zu bauen.

In Verbindung mit dem Texteditor Vim und den dort im Editor vorhandenen Befehlen make und copen hat man somit ein sehr mächtiges Entwicklungswerkzeug.

Das folgende Makefile ist dafür gedacht alle Quelldateien in einem Verzeichnis zu compilieren und schlussendlich zusammen zu linken.

Makefile

 1: # Name des ausfuehrbaren Programmes
 2: PROG = programm
 3:
 4: # Compiler
 5: CC = g++
 6: CFLAGS = -Wall -ansi -pedantic
 7:
 8: # Linker
 9: LD = g++
10: LDFLAGS =
11: OBJFILES = $(patsubst %.cpp,%.o,$(wildcard *.cpp))
12:
13: # Sicherheitskopien
14: BACKUPSUFFIX = ~
15: BACKUPFILES = $(patsubst %.cpp,%.cpp$(BACKUPSUFFIX),$(wildcard *.cpp)) $(patsubst %.h,%.h$(BACKUPSUFFIX),$(wildcard *.h))
16:
17: # Programm zum loeschen von Dateien
18: # DEL = del
19: DEL = rm -f
20:
21: # Programm um Meldungen auf der Konsole ausgeben zu koennen
22: ECHO = echo
23:
24: # Tags
25: TAGS = ctags
26: TAGSFLAGS = -a -R --c++-kinds=+p --fields=+iaS --extra=+q --languages=c++
27: TAGSFILE = tags
28:
29: .PHONY: help clean cleantags cleanbackup cleanall
30:
31: # Alles machen - compilieren und linken
32: all: $(PROG)
33:
34: # Hilfe ausgeben
35: help:
36:     @$(ECHO) Regeln
37:     @$(ECHO) ------
38:     @$(ECHO) all        : Quelldateien compilieren und linken
39:     @$(ECHO) tags       : Tag-Datei erstellen
40:     @$(ECHO) clean      : temporaere Dateien loeschen
41:     @$(ECHO) cleanbackup: Sicherheitskopien loeschen
42:     @$(ECHO) cleantags  : Tag-Datei loeschen
43:     @$(ECHO) cleanall   : Fuehre clean, cleanbackup und cleantags aus
44:     @$(ECHO)
45:     @$(ECHO) Infos
46:     @$(ECHO) -----
47:     @$(ECHO) Programmname: $(PROG)
48:     @$(ECHO)
49:
50: # Programm linken
51: $(PROG): $(OBJFILES)
52:     @$(ECHO) ======================================================================
53:     @$(ECHO) Linken
54:     @$(ECHO) ======================================================================
55:     $(LD) $(LDFLAGS) $(OBJFILES) -o $(PROG)
56:
57: # Programm compilieren
58: %.o: %.cpp
59:     @$(ECHO) ======================================================================
60:     @$(ECHO) Compilieren
61:     @$(ECHO) ======================================================================
62:     $(CC) $(CFLAGS) -c -o $@ $<
63:
64: # Objektdateien loeschen
65: clean:
66:     $(DEL) $(OBJFILES)
67:
68: # Tagdatei erstellen
69: tags:
70:     $(TAGS) $(TAGSFLAGS) -o $(TAGSFILE) .
71:
72: # Tagdatei loeschen
73: cleantags:
74:     $(DEL) $(TAGSFILE)
75:
76: # Sicherheitskopien loeschen
77: cleanbackup:
78:     $(DEL) $(BACKUPFILES)
79:
80: # Alle temporaren Dateien in einem Durchgang loeschen
81: cleanall: clean cleantags cleanbackup

Hinweis

Das Programm make ist sehr penibel was die Formatierung eines Makefiles angeht. Sämtliche Einzüge im Makefile müssen mit Tabulator gemacht werden, jegliches Leerzeichen führt zu einer Fehlermeldung.

cpp/makefile.txt · Zuletzt geändert: 24.03.2011 22:06 (Externe Bearbeitung)
Quelle: http://stefanjahn.de/cpp:makefile
Webseite: http://stefanjahn.de