Ziele formulieren

Ein Ziel ist BatchSkript mit einem Namen. Hierfür wird der Name des Ziels an den Anfang der Zeile geschrieben und mit einem Doppelpunkt versehen. Ab der nächsten Zeile schreibt man nun das BatchSkript. Wichtig: Das Batch-Skript muss mit einem Tabulator-Zeichen eingerückt werden, Leerzeichen werden nicht akzeptiert.

Hallo Welt

Schreiben wir also ein 'Hallo Welt' als Makefile.

Hallo:
	echo "Hallo Welt";

Dieses Skript speichern wir jetzt unter dem Namen 'Makefile', wechseln in der Eingabeaufforderung in das Verzeichnis und rufen make auf

Ambassador:make xin$ make
echo "Hallo Welt";
Hallo Welt
Ambassador:make xin$

Kommandoecho abstellen

Bevor make einen Befehl ausführt, wird er zuerst auf dem Bildschirm ausgegeben. Wenn man dies nicht wünscht, so lässt sich das Echo des Kommandos einfach mit einem vorangestelltem '@' unterbinden.

Hallo:
	@echo "Hallo Welt";

Dies gilt ausschließlich für die Kommandowiederholung, nicht für die Ausgaben des Kommandos.

Ambassador:make xin$ make
Hallo Welt
Ambassador:make xin$

Möchte man die Ausgabe des Befehls unterdrücken, so muss das genauso geschehen, als würde man den Befehl direkt in die Kommandoeingabe eingeben. Das folgende Skript gibt zwar den Befehl aus, aber nicht die Ausgabe des Befehls.

Hallo:
	echo "Hallo Welt" > /dev/null;

Mehrere Anweisungen

Weitere Anweisungen lassen sich einfach untereinander stellen.

Hallo:
	echo "Hallo Welt";
	echo "2. Anweisung";

Auch hier wird jede Anweisung wiederholt:

Ambassador:make xin$ make
echo "Hallo Welt";
Hallo Welt
echo "2. Anweisung";
2. Anweisung
Ambassador:make xin$

Sollen Zeilen nicht ausgegeben werden, so muss jeder Zeile ein '@' vorangestellt werden. Wie in Batch-Skripten können Zeilen jedoch auch getrennt werden, die zusammengehören.

Hallo:
	echo "Hallo Welt"; \
	echo "2. Anweisung";

Der Backslash ('\') bewirkt hier, dass die zweite Anweisung der ersten direkt angefügt wird. Für das Makefile ist dies eine Anweisung, die über zwei Zeilen geht und die auch als eine Anweisung ausgeführt wird. Nun sind die Semikolons zwingend für die BaSh-Programmierung:

Ambassador:make xin$ make
echo "Hallo Welt"; \
	echo "2. Anweisung";
Hallo Welt
2. Anweisung
Ambassador:make xin$

Auch hier kann ein '@' vor die Anweisung vorangestellt werde. Hierbei ist zu beachten, dass es nur eine Anweisung gibt. Folgendes Skript führt also dazu, dass das '@' sich mitten in der Anweisung befindet.

Hallo:
	echo "Hallo Welt"; \
	@echo "2. Anweisung";

Dies führt zum Shellbefehl echo „Hallo Welt“; @echo „2. Anweisung“; und das erzeugt natürlich einen Fehler, so dass make abgebrochen wird:

Ambassador:make xin$ make
echo "Hallo Welt"; \
	@echo "2. Anweisung";
Hallo Welt
/bin/sh: @echo: command not found
make: *** [Hallo] Error 127
Ambassador:make xin$

Ein echtes Makefile

Schauen wir es uns mal ein kleines, echtes Makefile an. Nehmen wir an, wir haben einen Quelltext in der Datei myprogram.c und wollen ihn kompilieren. Das Kompilieren (mit dem GCC-C-Compiler) benötigt folgenden Befehl:

gcc -o myprogram myprogram.c

Dies ist nun unser erstes Ziel:

program:
	@gcc -o myprogram myprogram.c

Statt des aufwendigen Aufrufs des Compilers (der mit vielen Parametern immer komplexer wird) ist mit diesem Makefile nur noch make einzugeben.