ubuntuusers.de

Makefile

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

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 GNU make 🇬🇧 und BSD make 🇬🇧 . 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]:

  • make

Befehl zum Installieren der Pakete:

sudo apt-get install make 

Oder mit apturl installieren, Link: apt://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:

1
2
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:

1
2
%.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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
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:

make install
make clean
make uninstall 

Wird kein Ziel angegeben, so wird das erste Ziel erstellt, in obigen Beispiel also cbg.

Diese Revision wurde am 29. August 2020 19:15 von lock-3 erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Programmierung