On Tuesday 2021-09-21 22:32, Karl Berry wrote:
>Thanks much. I was thinking I should avoid that since the .[ly] are not
>ultimate sources, but if it works, fine with me.
>    jan>
>    BUILT_SOURCES = foo.y
>    foo.y: foo.cweb
>            somecommands
>That would be sensible, but I failed to mention the problem with
>BUILT_SOURCES (sorry): the manual says it only works with the general
>targets (all, check, install, install-exec). I need something that works
>with individual targets.

The example that the manual gives (the one with foo.c and foo.h) has a
peculiarity: it involves $CC's automatic dependency _generation_,
which, in that case, implies a cycle:

  * foo.o (for practical purposes) requires foo.c and foo.h

  * but the _dependency_ (edge in make's DAG) "foo.o: foo.h"
    is only available after foo.o's command (gcc -Wp,-M*) has run.

BUILT_SOURCES is just a bandaid for that missing dependency, and yes,
this cycle breaker is only hooked to all/check/install.

If you were to hardcode into Makefile.am:

        foo.${OBJEXT}: foo.h

then BUILT_SOURCES would not be needed at all.


In your lex/yacc case, there is no such cycle anyway, because foo.h
already exists (created by lex or yacc - I always forget which)
by the time foo.o compilation is attempted.

Reply via email to