On Wed, 2012-06-20 at 23:08 -0700, Philip Guenther wrote:
> On Wed, Jun 20, 2012 at 3:20 PM, Andre Majorel <aym-ek...@teaser.fr> wrote:
> > On 2012-06-19 19:30 +0200, Andre Majorel wrote:
> >> define tgt
> >> .PHONY: $(1)
> >> $(1): destdir-unsafe
> >> endef
> >>
> >> $(eval $(call tgt, target1))
> >>       do something
> >>
> >> $(eval $(call tgt, target2))
> >>       do something else
> >>
> >> Unfortunately, the splicing of the two lines coming from $(tgt)
> >> and the "do something" line does not take place and Make bombs
> >> with
> >>
> >>   Makefile:#: *** commands commence before first target.  Stop.
> >>
> >> on the "do something" line. Any way to make it work ? Thanks in
> >> advance.
> >
> > No answers because it's a FAQ or because it's a tough one ?
> 
> -----
> define tgt
> $(eval .PHONY: $(value 1)
> $(value 1): destdir-unsafe)$(1):
> endef
> 
> $(call tgt, target1)
>         @echo something
> 
> $(call tgt, target2)
>         @echo something2
> -----

Ha!  That's very cute indeed Philip.  Nicely done.

For Andre: the reason this doesn't work is the same reason that an
"include" containing a target setup cannot be followed by the recipe for
that target after the include; this won't work:

        include target.mk
                @echo this is the recipe

For both include and $(eval ...) the makefile that is included or eval'd
is always parsed by make as if it were a self-contained makefile, and
the end-of-file (or end-of-string) markers will be interpreted by make
as ending any target that is currently being parsed.


_______________________________________________
Help-make mailing list
Help-make@gnu.org
https://lists.gnu.org/mailman/listinfo/help-make

Reply via email to