Im Übrigen kann Make auch ohne Makefile Programme übersetzen, solange diese nicht aus mehreren Dateien bestehen oder besondere Flags bei der Übersetzung benötigen.
Ein Hallo Welt
HelloWorld.cc
Code:
#include <iostream>
using namespace std;
int main ()
{
cout << "Hallo Welt!\n";
return 0;
}
lässt sich auf der Kommandozeile mit
übersetzen. Make findet die Datei, erkennt anhand er Endung, dass es sich um eine C++-Datei handelt und übersetzt nach der bereits vordefinierten Regel
Code:
%.cc: $<
g++ $(CPPFLAGS) $(LDFLAGS) $< -o $@
CPPFLAGS ist eine vordefinierte Variable für Compilerflags des C++-Compilers. LDFLAGS entsprechende Linkerflags. Ein minimales Makefile zum Übersetzen eines Programms aus einer Datei könnte also wie folgt aussehen:
Code:
CPPFLAGS = # gewünschte Compilerflags, zb. -Wall -pedantic -ansi
LDFLAGS = #gewünschte Linkerflags
Besteht jetzt ein Programm aus mehreren Übersetzungseinheiten, reicht es, seine Abhängigkeiten anzugeben.
Code:
CPPFLAGS = # gewünschte Compilerflags, zb. -Wall -pedantic -ansi
LDFLAGS = #gewünschte Linkerflags
TARGET = HelloWorld
EXT = .cc
CU = $(TARGET)$(EXT)
$(TARGET): $(CU)
Sollte ein anderer Compiler als der Standardcompiler des Systems eingesetzt werden, kann man die Variable CC überschreiben. An den Regeln muss man dann noch nichts ändern. Regeln erstellen muss man erst, wenn eine Programmiersprache nicht von make bekannt ist. Ein Beispiel (Ja, es gibt bereits Assembler-Regeln):
Code:
AS = nasm # ich mag nasm mehr als gas
ASFLAGS = # whatever
$(TARGET): $(TARGET).s
$(AS) $(ASFLAGS) $< -o $@
$< steht für das transformierbare Objekt, hier also die Datei mit dem Assembler-Code. $@ entspricht den Transformationsziel. Wichtig ist, dass die Transformationsregel mit einem Tab beginnt und nicht mit Leerzeichen.
Dadurch lassen sich sehr schlanke und vor allem generische Makefiles erzeugen, bei denen in den meisten Fällen nur das Target geändert werden muss.
Will wer mehr wissen, empfehle ich "Polze, UNIX-Werkzeuge zur Programmentwicklung, VEB Verlag Technik Berlin, ISBN 3-341-00865-9" Ich selbst hab noch bei dem Author Vorlesungen gehört. Das Buch ist gut, wenn man an ein Exemplar kommt. Bei Amazon sind hin und wieder welche günstig zu haben. Neben make wird auch Bourne Shell (sh), sed, ed und lex/yacc behandelt, mit vielen Beispielen.