help-make
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]