Date: Mon, 20 Nov 2000 19:32:22 +0100 Subject: make für Fortgeschrittene Liebe Zielgruppe, weil so wenige Leute richtig mit make umgehen können, obwohl das so ein obercooles Tool ist, dachte ich mir, daß ich auch dazu mal ein paar Worte fallen lassen sollte. Lest euch mal die make Dokumentation durch (liegt leider nur als info-File vor, kann man aber auch nach PDF oder DVI wandeln). Einer der Fehler, die ich bei unseren Makefiles so gesehen habe, ist das Setzen von CFLAGS. CFLAGS ist die Variable mit den Standard-Compiler-Optionen. Sowas setzt man nicht unkonditionell im Makefile, und schon gar nicht mit plattformabhängigen Optionen wie -malign-double. Schau mal, wie ich das in diet libc handhabe: ARCH=$(shell uname -m | sed 's/i[4-9]86/i386/') CFLAGS=-pipe -O -fomit-frame-pointer CROSS= ifeq ($(ARCH),sparc) override CFLAGS=-mcpu=supersparc -pipe -Os override VPATH=syscalls.s endif override ist übrigens tricky, weil das auch Werte aus rekursiven make-Aufrufen und von der Kommandozeile überschreibt, d.h. override nur anwenden, wenn ihr genau wißt, was ihr tut. Hier sieht man auch prima, wie man "if" im Makefile macht. "$(shell uname -m)" ist wie `uname -m` in perl. Andere kühle Funktionen von make: SYSCALLOBJ=$(patsubst syscalls.s/%.S,%.o,$(wildcard syscalls.s/*.S)) Wenn es syscalls.s/foo.S existiert, enthält SYSCALLOBJ am Ende "foo.o". Andere Sachen, die zu selten angewendet werden: .PHONY: clean clean: rm -f *.o core gmon.out Hierbei sind wichtig: das "-f" bei rm. Sonst beschwert sich rm, wenn eine der zu löschenden Dateien nicht da ist. Das .PHONY sagt make, daß "clean" kein richtiges target ist, d.h. wenn es eine Datei "clean" gibt, dann würde "make clean" trotzdem rm aufrufen und nicht sagen "nothing to be done". Was gibt es noch so? Regeln. Makefile-Regeln sehen so aus: .SUFFIXES: .pdf %.pdf: %.tex pdflatex $< Wenn man jetzt "make foo.pdf" sagt, ruft make pdflatex auf. Das SUFFIXES is nötig, weil make die Extension .pdf noch nicht kennt. Wer noch Fragen zu make und Makefiles hat, kann sich gerne bei mir melden. Am besten per Email, weil ich jetzt gehäuft daheim bin. Felix