# # Rechnernutzung in der Physik, WS 2012/13, Blatt 04, Aufg. 9 # # Zur Verfuegung gestelltes Makefile # #---------------------------------------------------------------------------- # # Kommentare in Makefiles: ab "#" bis zum Zeilenende. # # Variablendefinitionen: # # Compile settings CXX := g++ # Verwende g++ CXXFLAGS := -g -O -Wall -fPIC # Compiler-Optionen: # -g compile with debug information # -O optimize # -Wall show warnings for everything # -fPIC compile sources as shareable objects # Link settings LD := g++ # Use g++ for linking LDFLAGS := -O # -O optimize LDLIBS := # additional libraries # Remove tool: RM := rm -f sources := pimain.cc mathhelp.cc headers := mathhelp.h objects := $(sources:.cc=.o) # Objektdateien sind die # Quelldateien, wobei .cc durch .o # zu ersetzen ist. #---------------------------------------------------------------------------- # Regeln: # Wenn "make" ohne Regelangabe aufgerufen wird, wird die erste # Regel in der Datei aufgerufen. Eine Regel ist ueblicherweise ein # "Rezept" wie ein "Bestandteil" des Endprogramms erzeugt werden kann. # # Eine Regel hat immer folgende Syntax: # ZIEL: ABHAENGIGKEITEN # [TAB] BEFEHLE # [TAB] BEFEHLE # etc. # # oder mit den gebraeuchlichen englischen Ausdruecken: # TARGET: DEPENDENCIES # [TAB] COMMAND(S) # [TAB] COMMAND(S) # etc. # # Wenn eine Regel zur Ausfuehrung gelangt, werden zunaechst die # Abhaengigkeiten ueberprueft: Eine Regel gelangt zur Ausfuehrung, wenn # entweder ihr ZIEL (als Datei) nicht exisitert oder das Ziel aelter ist # als eine der ABHAENGIGKEITEN. Dann werden die BEFEHLE abgearbeitet. # Diese muessen stets durch ein Tabulator eingerueckt sein! # # ABHAENGIGKEITEN fuehren dazu, dass weitere Regeln ueberprueft und # abgearbeitet werden. Dies sogar bevor die Befehle der aktuellen # Regel abgearbeitet werden. So koennen also "pre-requisites" # vereinbart werden. # # Konkrete Regeln dieses Makefiles: # # Regel: das fertige Programm haengt ab von den # uebersetzten Teilobjekten. Der Befehl gibt an, wie # diese Teilobjekte zusammengebunden werden: ("Linking") pi: $(objects) $(LD) $(LDFLAGS) -o pi $(objects) $(LDLIBS) # Regel: die Objekte haengen von den Header-Dateien (Funktionskoepfen) ab # (Verstaendnis-Frage: warum ist diese Abhaengigkeit wuenschenswert?) $(objects): $(headers) # Regel: Wie wird aus einem Quellfile ein Objectfile (Endung .o)? # Diese Regel ist generisch: Sie gibt an, wie aus einer # Quelldatei beliebigen Namens mit Endung .cc eine Datei # mit Endung .o erzeugt wird. .cc.o: $(CXX) $(CXXFLAGS) -c $*.cc -o $*.o # Regel: Aufraeumen # Sehr haeufig gibt es eine Regel "clean", die # saemtliche Objektdateien entfernt. Aufruf per "make clean". clean: $(RM) *.o # Regel: Verspieltes Beispiel, das zeigt, dass beliebige Kommandos # angegeben werden koennen. # ('@' bewirkt, dass die nachfolgende Befehlszeile selbst nicht ausgegeben # wird.) # Aufruf mit "make chrono" chrono: @echo "Hallo." @echo -n "Datum und Uhrzeit: " @date ;