====== 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.