Benutzer-Werkzeuge

Webseiten-Werkzeuge


make

Dies ist eine alte Version des Dokuments!


Inhaltsverzeichnis

Make

rekursives Make

Soll make zum Bauen von Projekten mit mehreren Unterordner eingesetzt werden, kann das im Makefile so realisiert werden:

SUBDIRS = foo bar baz
 
subdirs:
for dir in $(SUBDIRS); do \
        $(MAKE) -C $$dir; \
done

Diese Vorgehen ist aber nicht nicht empfehlenswert, da alle anderen Unterordner abgearbeitet werden, auch wenn ein Fehler in einem Unterordner aufgetreten ist. So lässt sich auch der make-Prozess nur schlecht parallelisieren. (vgl. Make-Doku) Besser ist ein Vorgehen, bei dem jeden Unterverzeichnis ein extra Target ist:

SUBDIRS = foo bar baz
 
.PHONY: subdirs $(SUBDIRS)
 
subdirs: $(SUBDIRS)
 
$(SUBDIRS):
     $(MAKE) -C $@
 
foo: baz

Ein rekursives Clean-Target lääst sich zum Beispiel so realiseren:

SUBCLEAN = $(addsuffix .clean,$(SUBDIRS))
 
.PHONY: clean $(SUBCLEAN)
clean: $(SUBCLEAN)
 
$(SUBCLEAN): %.clean:
        $(MAKE) -C $* clean

Das Hinzufügen des Suffix .clean ist notwendig, da das clean-Target für ein Unterverzeichnis anders heißen muss, als das Target zum Bauen. Es wird durch die Abhängigkeit %.clean und das $* wieder entfernt.

make.1382044932.txt.gz · Zuletzt geändert: 2013/10/17 23:22 von olli