http://www.gnu.org/software/make/man...html#RecursionCode:make target -C dir
hi ich hoffe von euch kann mir jemand helfen
hab folgendes anliegen, ich will in einem (master- oder top-level-)makefile mehrere andere makefiles in subdirs zusammenfassen bzw. einmal das master-makefile starten dann händelt der alle in den subdirs ab und zwar die befehle make-all und make-clean.
so sieht etwa die struktur aus:
Bild hier
die makefiles in den subdirs sind ganz normale files wie sie mfile generiert.
die master-makefile hab ich selbst geschrieben...
was ich jetzt schon herausgefunden hab, er übernimmt den parameter 'all' bzw 'clean' nicht . es wir immer der erste befehl in der makefile ausgeführt sprich das all.Code:MODULES = module1 module2 all: for dir in $(MODULES); do \ (cd $$dir && ${MAKE} all); \ done clean: for dir in $(MODULES); do \ (cd $$dir && ${MAKE} clean); \ done
d.h. es hat den selben effekt wenn ich folgendes schreiben würde:
also wieder zur hauptfrage, wie übergebe ich dem makefile das ich im subdir aufrufe das ich zb make clean haben will?Code:for dir in $(MODULES); do \ (cd $$dir && ${MAKE}); \ done
thx
ps: im code müsst ihr euch den TAB immer dazu denken :P
http://www.gnu.org/software/make/man...html#RecursionCode:make target -C dir
Disclaimer: none. Sue me.
du meinst dann so?[/code]Code:for dir in $(MODULES); do \ (make clean -C $$dir); \ done
Jupp.
Bzw. ${MAKE}. Die () brauchst du jetzt nicht mehr. Ich vermute mal das Problem kommt daher, daß du unter Windows bist? Die andere Variante sollte auch gehen.
Disclaimer: none. Sue me.
boah ne das geht ja gar nicht
der hat jetzt meinen rechner zugespämmt also der hängt sich da auf...Code:clean: for dir in $(MODULES); do \ make clean -C $$dir; \ done
ja ich bin unter windows drin.
edit:
kann das sein das es ein problem macht wenn ich das mit winAVR mache
sprich ich mach da mach da immer tools>>make all
Die klammern braucht man wohl doch? Was da genau abgeht zwischen sh, mingw, windows, cmd, etc weiß der Teufel... Mit den () geht's auch nicht?
Möglicherweise ist das Problem, da das das ganze in einer shell laufen sollte. Geht denn, wenn du die ganze for-Schleife innerhalb von sh -c 'befehle' oder sh -c "befehle" ausführst?
Disclaimer: none. Sue me.
mh nö nix funktioniert, hab probleme mit der "for X in LIST; do.." irgendwie für er den LOOP-Befehl nicht richtig aus sprich er macht bloss das make aber sonst nix er nimmt derm parameter clean nicht mit
Bei mit geht's auch nicht. Ich hab mal nen bug report losgeschickt, vielleicht tut sich ja was...
Disclaimer: none. Sue me.
bin ma gespannt ob da was geht, hab schon überall gesucht ob ich vielleicht nen shell fehler in meinem skript hab, aber hab keinen gefunden.
Ich hab' gerade nix passendes zur Hand, aber schaut doch mal in die Linux Kernel Sourcen. Die werden mit rekursiven makefiles gebaut.
Wenn ich mich recht entsinne sind die aber so aufgebaut wie im ersten Post (also Liste der subdires nehmen, einzeln in die verzeichnisse wechseln, make aufrufen)
Lesezeichen