Hi
Thanks. I used eval function and rearranged my code. Your code certainly
helped. :)

Regards
Kalyan


On Wed, Nov 26, 2008 at 11:13 PM, Lars Jessen <[EMAIL PROTECTED]> wrote:

> kalyan wrote:
>
> > I will explain the context.
> > I have a build system which has inter-dependencies between modules.
> > So for building a module i hope to write a single function
> > which uses a single argument,namely, the module name:
> >
> > define build_module
> >         MODULE_NAME=$(1); \
> >         $(do_some_sanity_checks); \
> >         echo building module $$MODULE_NAME; \
> >         for dep in `extract_dependencies_of_the_module`;do \
> >                 $(call build_module,$$dep); \
> >         done; \
> >         $(do_build)
> > endef
> >
> > My hope being, the module which has no dependencies builds
> > first and so on..But it does not achieve what is intended.
> >
> > Any hints are greatly appreciated.
>
> I think your problem is the $(do_build) step, you need a topological
> ordering of the modules, make
> can do that for you, try the following:
>
> # begin GNUmakefile
>
> main_DEPS=mymodule1 mymodule2
> mymodule1_DEPS=mymodule2 mymodule3
> mymodule2_DEPS=
> mymodule3_DEPS=mymodule2
>
> define do_build
> $(1) : $(2)
>        @echo building $(1)
> endef
>
> build_module=\
>        $(if $($(1)_DEFINED),,\
>        $(eval $(call do_build,$(1),$($(1)_DEPS)))\
>        $(eval $(1)_DEFINED=1)\
>        $(eval $(foreach dep,$($(1)_DEPS),$(eval $(call
> build_module,$(dep)))))\
>        )
>
> all : $(eval $(call build_module,main)) main
>
> # end GNUmakefile
>
>
> - Lars
>
>
> _______________________________________________
> Help-make mailing list
> [email protected]
> http://lists.gnu.org/mailman/listinfo/help-make
>
_______________________________________________
Help-make mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/help-make

Reply via email to