.
[ Voor 99% gewijzigd door Eelis op 18-02-2015 19:20 ]
[ Voor 99% gewijzigd door Eelis op 18-02-2015 19:20 ]
Ik weet het antwoord zo niet, maar die laatste regel kan netter:Eelis schreef op 12 juli 2004 @ 09:48:
code:
1 2 3 4 5 6 7 .PHONY: docs distrib.tar: X tar -cf $@ docs/docs.html docs: cd docs && $(MAKE) docs.html
1
2
| docs:
make -C docs docs.html |
More than meets the eye
There is no I in TEAM... but there is ME
system specs
Verwijderd
1
2
3
4
5
6
7
| %.html: %.xml distrib.tar: docs tar -cf $@ $^ docs: docs/docs.html make -C docs docs.html |
[ Voor 18% gewijzigd door Verwijderd op 12-07-2004 10:45 ]
[ Voor 99% gewijzigd door Eelis op 18-02-2015 19:20 ]
1
2
3
4
5
6
7
8
| .PHONY: docs
DIST_FILES=
distrib.tar: $(DIST_FILES)
tar -cf $@ $(DIST_FILES)
include docs/Makefile |
1
2
3
4
| docs/docs.html: docs/docs.xml
cp $< $@
DIST_FILES+=docs/docs.html |
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
[ Voor 99% gewijzigd door Eelis op 18-02-2015 19:20 ]
Idd, op enkele platformen is er zowel een make als gmake. Als je in gmake opeens make gaat aanroepen, gebruik je opeens een andere implementatie. Doordat make MAKE set en jij die variabele gebruikt, weet je altijd zeker dat je recursief dezelfde make aanroept.Eelis: het is volgens de manual niet verstandig om $(MAKE) door 'make' te vervangen.
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
[ Voor 7% gewijzigd door Robtimus op 12-07-2004 11:51 ]
More than meets the eye
There is no I in TEAM... but there is ME
system specs
[ Voor 99% gewijzigd door Eelis op 18-02-2015 19:20 ]
Ah ja, het is nu duidelijk dat je op zich niks hebt tegen een recursive make (dacht even dat je bezig was met het ontlopen daarvan). Je gaf zelf eigenlijk al de aanzet tot een goede oplossing:Eelis: zonder daarmee te veroorzaken dat alle afhankelijke targets onnodig ge-update worden
Als je voor de dist recursief een "make all" aanroept op alle subdirs, dan zullen alle targets geupdate waarvan het default target afhankelijk van is. Dit is ook min of meer wat door het automatische all/install/dist targets gedaan wordt in Automake. Eigenlijk wordt een dist daar zelfs recursief opgebouwd: elke subdir plaatst de files die in de distributie moeten komen in een locale, tijdelijk directory. Het top-level pakt het hele zaakje alleen maar in.'docs/docs.html' valt af omdat distrib.tar dan niet ge-update wordt als docs.xml wordt aangepast.
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
[ Voor 106% gewijzigd door Eelis op 18-02-2015 19:20 ]
Tja, je wilt iets lokaal oplossen, maar je wilt wel recursive gebruiken. Daarmee zeg je dus eigenlijk: ik wil recursieve maak, maar nu even niet. Als je je dependencies in de Makefiles van subdirectories definieert, dan kunnen die alleen *daar* gebruiken. Als je al die dependency kennis ook op top level wil hebben, dan moet je geen recursive make gebruiken (wat niet betekent dat je alle regels op top-level moet schrijven, zie m'n include oplossing).Eelis: Het punt is eigenlijk dat ik het probleem liever locaal en bescheiden op wil lossen binnen de rules die betrekking hebben op de betreffende files, zonder terug te hoeven vallen op 'grootse'/'big-guns' oplossingen die meteen op alle subdirectories en met allerlei default targets werken..
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
[ Voor 99% gewijzigd door Eelis op 18-02-2015 19:20 ]
[ Voor 107% gewijzigd door Eelis op 18-02-2015 19:20 ]