====== Variablen definieren ====== Innerhalb von Make lassen sich Variablen definieren. Damit lassen sich die Skripte vor ihrer Ausführung manipulieren. Nehmen wir das [[make:targets#ein echtes Makefile|erste echte Skript]], das wir gesehen habe: program: @gcc -o myprogram myprogram.c Variablen werden am Zeilenanfang geschrieben und ihnen wird mit '=' ein Wert zugewiesen. Es gibt einige Standard-Variablen, die in nahezu allen Skripts auftauchen: ^ Variable ^ Beschreibung ^ | CC | Name des Compilers | | CFLAGS | Compiler-Optionen | | LDFLAGS | Linker-Optionen | Ersetzen wir im Skript die entsprechenden Anweisungen: CC = gcc CFLAGS = LDFLAGS = program: @$(CC) $(CFLAGS) $(LDFLAGS) -o myprogram myprogram.c Make macht daraus den gleichen Befehl wie zuvor. Stellen wir uns nun vor, dass wir viele Programme so kompilieren und wir die Compileroption ''-Wall'' entdecken und in Zukunft überall verwenden wollen. Dann brauchen wir lediglich die Variable ''CFLAGS'' zu ändern, die ganz oben im Skript leicht zu finden ist, statt alle Aufrufe des Compilers im Skript zu suchen: CFLAGS = -Wall Benutzen wir Mathe-Funktionen, muss dem Linker (ld) mitgeteilt werden, dass die Mathebibliotheken mitgelinkt werden müssen: LDFLAGS = -lm Es können beliebige Variablen definiert werden: CC = gcc CFLAGS = -Wall LDFLAGS = -lm OUTPUT = myprogram FILES = myprogram.c program: @$(CC) $(CFLAGS) $(LDFLAGS) -o $(OUTPUT) $(FILES) Kommen nun neue Dateien hinzu, werden die Dateien einfach an FILES amgehängt: FILES = myprogram.c extention.c Die Variable FILES kann nun nicht nur zum Kompilieren verwendet werden, sondern auch, um Dokumentationsprogramme (z.B. mit Doxygen) darüber zu informieren, aus welchen Dateien Dokumentation erzeugt werden kann. Eine Variable hilft hier also, mehreren Programmen, die gleichen Informationen zu geben, ohne dass eine Änderungen an mehreren Stellen erforderlich sind. ===== Variablen verändern ===== Ruft man make auf, kann man im Aufruf Variablen verändern. In unserem Beispiel oben, steht der Name des Programms in $(OUTPUT). Möchte man sein Programm beispielsweise 'SuperDuper' nennen, so kann man das Skript wie folgt aufrufen: make OUTPUT=SuperDuper