make
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
make [2011/06/29 10:47] – angelegt 130.75.57.43 | make [2023/06/03 08:40] (aktuell) – [rekursives Make] olli | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Make ====== | ====== Make ====== | ||
+ | ===== rekursives Make ===== | ||
+ | Soll make zum Bauen von Projekten mit mehreren Unterordner eingesetzt werden, kann das im Makefile so realisiert werden: | ||
+ | <code make> | ||
+ | SUBDIRS = foo bar baz | ||
+ | |||
+ | subdirs: | ||
+ | for dir in $(SUBDIRS); do \ | ||
+ | $(MAKE) -C $$dir; \ | ||
+ | done | ||
+ | </ | ||
+ | Diese Vorgehen ist aber nicht nicht empfehlenswert, | ||
+ | Besser ist ein Vorgehen, bei dem jeden Unterverzeichnis ein extra Target ist: | ||
+ | |||
+ | <code make> | ||
+ | SUBDIRS = foo bar baz | ||
+ | |||
+ | .PHONY: subdirs $(SUBDIRS) | ||
+ | |||
+ | subdirs: $(SUBDIRS) | ||
+ | |||
+ | $(SUBDIRS): | ||
+ | | ||
+ | |||
+ | foo: baz | ||
+ | </ | ||
+ | Ein Clean-Target für ein Projekt mit mehreren Unterordnern lässt sich zum Beispiel so realiseren: | ||
+ | <code make> | ||
+ | SUBCLEAN = $(addsuffix .clean, | ||
+ | | ||
+ | .PHONY: clean $(SUBCLEAN) | ||
+ | clean: $(SUBCLEAN) | ||
+ | | ||
+ | $(SUBCLEAN): | ||
+ | $(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. | ||
+ | |||
+ | ===== Häufige Fehler ===== | ||
+ | |||
+ | ==== makefile: | ||
+ | Die angegebene Zeile beginnt nicht mit eine Tab. | ||
+ | ==== /bin/sh: -c: line 0: syntax error near unexpected token `foo, | ||
+ | Der make-Befehl ifeq muss am Anfang der Zeile stehen und darf nicht durch Tabs oder Leerzeichen eingerückt sein: | ||
+ | <code make> | ||
+ | target: | ||
+ | ifeq (foo, bar) | ||
+ | ... | ||
+ | endif | ||
+ | </ | ||
+ | |||
+ | ===== Tipps und Tricks ===== | ||
+ | ==== Prüfen, ob Datei existiert ==== | ||
+ | So lässt sich prüfen, ob eine Datei existiert: | ||
+ | <code make> | ||
+ | ifeq ($(wildcard $(FileName)), | ||
+ | # do something when the file doesn' | ||
+ | else | ||
+ | # do something different when it does | ||
+ | endif | ||
+ | </ | ||
===== Links ===== | ===== Links ===== | ||
[[http:// | [[http:// | ||
make.1309337242.txt.gz · Zuletzt geändert: 2011/06/29 10:47 von 130.75.57.43