42. make II

Ein Template-Makefile:

CFLAGS += -Wall

.PHONY: all depend clean check install

SRCS = estr_test.c edelstring.c
OBJS = estr_test.o edelstring.o

all: estr_test

estr_test: $(OBJS)
  $(CC) -o $@ $(LDFLAGS) $(CFLAGS) $^

depend:
  makedepend -s "# makedepend depends on me"\
  -- $(CFLAGS) -- $(SRCS)

clean:
  rm -f $(OBJS) estr_test

check:
  @echo "No checks defined, sorry"

install:
  @echo "Nothing to install yet"

Es gibt einige Targets, die in allen Makefiles stehen sollten, zumindest all (alles bauen, was zu bauen ist) und clean (die Resultate von make aufräumen). Nett sind weiter install (die erzeugten Programme installieren), check (Funktionsfähigkeit der Programme prüfen), depend (s.o.), dist (baut ein Archiv mit allen zur Kompilation nötigen Dateien).

Wird make ohne Argumente aufgerufen, baut es das erste Target. Es ist in der Regel nicht verkehrt, “all” als das erste Target im Makefile stehen zu haben.

Das geht noch schöner: Vgl. Makefile Conventions im make-info.

Weitere Automatisierung durch automake, autoconf.

Übungen zu diesem Abschnitt

Ihr solltet euch wenigstens an den rötlich unterlegten Aufgaben versuchen

(1)

Besorgt euch ein Programm aus dem Netz (z.B. irgendwas von freshmeat – wenn euch nichts besseres einfällt, nehmt GNU sed) und seht euch an, wie das gebaut wird. In den meisten Fällen wird eine Datei namens INSTALL (oder ähnlich) beliegen, die euch zu den nötigen Dateien führt. Wenn euer Programm GNU autoconfig verwendet (ein Hinweis darauf ist, dass ihr aufgefordert werdet, “configure” zu tippen), seht euch das configure-Skript an (aber nicht zu lange). Seht euch die (eventuell generierten) Makefiles an.


Markus Demleitner

Copyright Notice