[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] }}} Bei make handelt es sich um ein Werkzeug, mit dem man die Abhängigkeiten eines Build Prozesses auflösen kann. Dieses Stück Software ist schon sehr alt und in unterschiedlichsten Implementierungen verfügbar, die verbreitesten sind wohl [http://www.gnu.org/software/make/ GNU make] {en} und [http://www.freebsd.org/cgi/man.cgi?query=make&sektion=1 BSD make] {en} . Leider sind die verschiedenen Varianten untereinander nicht ganz kompatibel. Dieser Artikel beschränkt sich auf GNU make. = Installation = Das benötigte Paket lässt sich unter folgendem Namen installieren [1]: {{{#!vorlage Paketinstallation make }}} = Kurze Beschreibung = '''make''' kann sehr viel mehr, als hier beschrieben werden könnte, es folgt daher lediglich eine kurze Erläuterung, um was es eigentlich geht. In einem ''Makefile'' lassen sich Regeln beschreiben, wie bestimmte "Targets" (Ziele) erstellt werden können. Diese können von anderen Zielen oder Dateien abhängen. Beispielsweise erstellt man eine Objektdatei aus einer Sourcedatei, indem man sie kompiliert. Dazu muss aber natürlich die Sourcedatei vorhanden sein. Eine solche Regel könnte zum Beispiel so aussehen: {{{#!code make hello.o: hello.c $(CC) -c $(CFLAGS) hello.c }}} die erste Zeile besagt, dass zum Erstellen von hello.o die Datei hello.c benötigt wird. Die Zweite sagt aus, wie das Erstellen von hello.o zu bewerkstelligen ist. Variablen werden mit ''$'' eingeleitet. So beinhaltet zum Beispiel ''$(CC)'' in der Regel den Namen des C Compilers. Derartige Regeln kann man auch mit Wildcards versehen, so kann man eine Regel erstellen, mit der man ausdrücken kann, wie generell aus einer *.c eine *.o Datei zu erstellen ist: {{{#!code make %.o: %.c $(CC) -c $(CFLAGS) $< }}} Dabei steht die spezielle Variable ''$<'' für den Namen der tatsächlichen Source Datei, wie zum Beispiel ''hello.c''. = Beispiel = {{{#!code make CC = gcc OBJECTS = cbg.o LIBS = -lcurl CFLAGS = -Wall -O2 BINDIR = $(DESTDIR)/usr/bin NAME = cbg cbg: $(OBJECTS) $(CC) -o $(NAME) $(OBJECTS) $(LIBS) %.o: %.c $(CC) -c $(CFLAGS) $< install: install --mode=755 $(NAME) $(BINDIR)/ clean: rm *.o $(NAME) uninstall: rm $(BINDIR)/$(NAME) }}} Damit ist es nun möglich, die einzelnen Ziele zu erstellen: {{{#!vorlage Befehl make install make clean make uninstall }}} Wird kein Ziel angegeben, so wird das erste Ziel erstellt, in obigen Beispiel also ''cbg''. = Links = * [wikipedia:Make: Make in der Wikipedia] # tag: Programmierung