[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
caching contents of included makefiles
From: |
Noel Yap |
Subject: |
caching contents of included makefiles |
Date: |
Sun, 12 Oct 2003 17:57:57 -0400 |
First, let me briefly go into the rationale behind all this.
Non-recursive make (as per http://aegis.sourceforge.net/auug97.pdf) promotes
the inclusion of makefiles to transfer information regarding dependencies
within a module. Since module dependencies form a DAG, caching the contents of
the makefiles can save
many file open and close operations thereby speeding up the build.
The solution:
# sets __FILE__ macro to file to be included, then includes the file.
# allows included file to know where it is in relation to includer.
# included file is cached in memory in case it's included again.
# $(1) is the file to be included
# $(2) is the current value of $(__FILE__)
define _include-makefile
__FILE__ := $(1)
ifndef $(1).contents
-include $(1).contents
endif
$$(eval $$($(1).contents))
__FILE__ := $(2)
endef
# include makefile passing in its name as __FILE__
# $(1) is the file to be included
include-makefile = $(eval $(call _include-makefile,$(1),$(__FILE__)))
%.contents: %
@( \
echo define $@; \
cat $^; \
echo endef; \
echo; \
echo '$@ := $$(value $@)'; \
) >$@
The drawbacks I see with this solution is the extra initial cost due to the
%.contents file creation and inclusion and, as it is, it needs tweaking in
order to work if the included file is on a read-only partition. The second
drawback isn't too difficult
to overcome. Can anyone see a way around the first?
Thanks,
Noel
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- caching contents of included makefiles,
Noel Yap <=