Makefile mit Rekursion

OP #4540884
Lesenswert?

Hallo allerseits
ich möchte ein Makefile schreiben, welches sowohl unter Linux als auch 
unter Windows gleich funktionert. Bisher habe ich für mein Problem nur 
eine zufriedenstellende Linux-Lösung.

Und zwar liegen in mehreren Unterordnern kleinere Teilprojekte, welche 
auch ihrerseits wieder ein Makefile besitzen. Das "Haupt"-Makefile, 
welches ich nun schreiben möchte, soll alle Unterordner traversieren und 
dort das jeweilige Makefile aufrufen. Sodass ich nur an einer Stelle ein 
make aufrufen muss.

Unter Linux funktioniert folgendes:
1
DIRECTORY = $(shell find ./* -maxdepth 1 -type d)
2

3
all:
4
  @for dir in $(DIRECTORY); do $(MAKE) -C $$dir; done
unter Windows natürlich wieder mal nicht, weil find dort anders ist. 
Selbst mit GnuWin32 oder den UnxUtils, welche find nachbilden, geht es 
nicht, da die Befehlssyntax einfach anders ist als unter Linux.

Wie macht man mit make eine portable Rekursion?
OP #4542147
Lesenswert?

Nachtrag:

ich habe es herausgefunden wie es geht!
1
SUBDIRS := $(sort $(dir $(wildcard */*)))
2

3
.PHONY: all $(SUBDIRS) clean
4

5
all: $(SUBDIRS)
6
  pdflatex --interaction=nonstopmode --synctex=-1 --shell-escape test.tex
7

8
$(SUBDIRS):  ; $(MAKE) -C $@ $(MAKECMDGOALS)
9

10
clean: $(SUBDIRS)
11
  -@rm -rf *-gnuplottex-fig*.*
12
  -@rm -rf *.aux *.log *.lof *.bak *.loa *.log *.lot *.bbl *.blg *.dvi *.out *.brf
13
  -@rm -rf *.thm *.toc *.idx *.ilg *.ind *eps-converted-to.pdf *.gnuplot *.tps
14
  -@rm -rf *-gnuplottex-fig*.* *temp*.dat *.nav *.snm *.vrb *.lol *.tmp
15
  -@rm -rf gnuplottex *.synctex *.synctex.gz *.xwm

Ein Makefile mit dieser Syntax führt auch ein rekursives clean durch. 
Top, Danke an Rolf Magnus! :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren