On Mon, 2007-08-20 at 16:15 +0100, Dave Korn wrote:
> Anyway, the problem is that CLCMD doesn't get expanded when the rule
> for $(loc_mod)_clean is defined, but when it gets executed. By that
> time, only the last definition of CLCMD still remains. Now, the first
> thing that might spring to mind would be to do:
>
> $(loc_mod)_CLCMD:= Module/$(loc_mod)/*.bak
>
> $(loc_mod)_clean:
> @echo $($(loc_mod)_CLCMD)
>
> but that suffers the same problem: loc_mod doesn't get expanded until
> the rule is run, by which time it too has the problem.
>
> To get it expanded earlier, you need an eval:
>
> define clean_rule
> $(loc_mod)_clean:
> @echo $$($(loc_mod)_CLCMD)
> endef
>
> $(eval $(call clean_rule))
You don't need eval for this. There are a number of ways to do it. A
more-or-less portable way (works with all versions of GNU make and many
other versions of make, but not all), would be to use automatic
variables:
$(loc_mod)_CLCMD := Module/$(loc_mod)/*.bak
$(loc_mod)_clean:
@echo $($(@:_clean=)_CLCMD)
Another, slightly fancier option would be to use target-specific
variables:
$(loc_mod)_clean: CLCMD := Module/$(loc_mod)/*.bak
$(loc_mod)_clean:
@echo $(CLCMD)
--
-------------------------------------------------------------------------------
Paul D. Smith <[EMAIL PROTECTED]> Find some GNU make tips at:
http://www.gnu.org http://make.paulandlesley.org
"Please remain calm...I may be mad, but I am a professional." --Mad Scientist
_______________________________________________
Help-make mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/help-make