# 17May24: Eine Makefile für das double+execvp Beispiel. Achtet # darauf, dass die Datei wirklich "Makefile" heißt, und gib dann im # gleichen Verzeichnis "make" ein. # Eine Makefile besteht (vereinfacht) aus Makro-Definitionen, hier # bspw. Kürzel für den C Compiler und C Compiler Flags: CC = gcc CFLAGS = -Wall -Werror -pedantic -std=c11 -D_XOPEN_SOURCE=700 # Und aus Regel wie man Dateien bauen kann. Eine Regel hat drei # Bestandteile: # # 1. Ziel Was man bauen will # 2. Abhängigkeiten Was man dazu braucht # 3. Befehl Wie man es baut # # Um [Ziel] zu bauen prüft make(1) die [Abhängigkeiten]. Wenn diese # nicht existieren, sucht es rekursiv nach weiteren Regeln oder # schlägt fehl. [Ziel] neuer sein als alle [Abhängkeiten], dann # passiert nichts mehr, ansonsten führt es [Befehl] aus. # Manche Befehle fügt man aus Konvention hinzu, wie "all", was keine # Datei "all" baut sondern nur einen Hilfreichen Befehl damit wir auf # der Konsole "make all" schreiben können. .PHONY: all all: double # Hier ein paar echte Regeln, welche aus .c Dateien .o Datien bauen, # oder mehere .o Dateien zu einer ausführbaren Datei: double: double.o execvp.o $(CC) $(CFLAGS) -o double double.o execvp.o double.o: double.c execvp.h $(CC) $(CFLAGS) -c -o double.o double.c execvp.o: execvp.c execvp.h $(CC) $(CFLAGS) -c -o execvp.o execvp.c # Als Komplement zu "all", sollte die konventionell Pseudo-Regel # "clean" alles aufräumen, was die Makefile bauen kann. .PHONY: clean clean: rm -f double double.o execvp.o