| Autor |
Nachricht |
rüdiger
Moderator
Benutzerprofil
Anmeldungsdatum: 11.07.2001
Beiträge: 23067
|
rüdiger Moderator
16:49:24 09.10.2004 Titel: |
Makefile - das ultimative Makefile für jedes Projekt |
Zitieren |
Hier wird eine Makefile vorgestellt (benötigt GNU/Make), die man in den meisten Projekten einfach benutzen kann, man muss nur folgende Variablen anpassen:
TARGET Name des erzeugten Binarys
CXXFLAGS hier werden die Flags eingetragen, die dem Compiler überreicht werden.
LIBS hier werden die Flags eingetragen, die beim linken übergeben werden.
EXT hier wird die Endung der C++-Code-Dateien angegeben
Für umfangreichere Anpassungen empfiehlt sich ein Blick in das GNU/Make Handbuch.
Bitte darauf achten, dass die Zeilen mit Tabs und nicht mit Spaces eingerückt sind.
| Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | TARGET := ./program
CXXFLAGS := -g -Wextra -Wall -Wno-long-long -pedantic-errors -std=c++98
CXX := g++
LIBS :=
EXT := cpp
BUILDDIR := build
override BUILDDIR := $(strip $(BUILDDIR))
SOURCES := $(wildcard *.$(EXT))
OBJECTS := $(patsubst %.$(EXT), $(BUILDDIR)/%.o, $(SOURCES))
DEPS := $(patsubst %.$(EXT), $(BUILDDIR)/%.dep, $(SOURCES))
.PHONY: all
all: $(TARGET)
$(TARGET): $(OBJECTS) $(DEPS)
$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS)
ifneq ($(MAKECMDGOALS), clean)
-include $(DEPS)
endif
$(OBJECTS): $(BUILDDIR)/%.o: %.$(EXT) $(BUILDDIR)/%.dep $(BUILDDIR)/.tag
$(CXX) $(CXXFLAGS) -c $< -o $@
$(DEPS): $(BUILDDIR)/%.dep: %.$(EXT) $(BUILDDIR)/.tag
mkdir -p $(dir $(@))
$(CXX) $(CXXFLAGS) -MM $< -MT $@ -MT $(<:.$(EXT)=.o) -o $@
%.tag:
mkdir -p $(dir $(@))
touch $@
.PHONY: clean
clean:
$(RM) -r $(BUILDDIR) | |
Danke an volkard, der das Makefile entworfen hat, als auch an ponto, MrN und denis (aka DrGreenthumb), die fleißig Korrekturen und Verbesserungen beigetragen haben.
Unter Beachtung folgender Hinweise könnte das Makefile noch verbessert werden: http://make.paulandlesley.org/autodep.html
Update: Das ultimative Makefile kommt nun auch mit mehreren Codeverzeichnissen klar.
2012-06-28: $(RM) anstelle rm -f
alter Thread |
Zuletzt bearbeitet von rüdiger am 18:34:14 30.09.2012, insgesamt 28-mal bearbeitet |
|
 |
Werbeunterbrechung
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum nicht antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|