Seitenleiste

Variablen definieren

Innerhalb von Make lassen sich Variablen definieren. Damit lassen sich die Skripte vor ihrer Ausführung manipulieren. Nehmen wir das 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