%% Yaroslav Halchenko <[EMAIL PROTECTED]> writes:

  yh> > cat  Makefile
  yh> SO=1
  yh> T=2
  yh> VER=$(SO).$(T)

  yh> lib%.so:lib%.so.$(SO)
  yh>         ln -snf $$(basename $<) $@

  yh> lib%.so.$(SO):lib%.so.$(VER)
  yh>         ln -snf $$(basename $<) $@

  yh> a/b/c/lib%.so.1.2: a/b/c/libz%.so
  yh>         cat $< >| $@
        
  yh> > rm a/b/c/* -f
  yh> > /var/tmp/test# echo 1 > a/b/c/libzz.so.1.2
  yh> > /var/tmp/test# make a/b/c/libz.so
  yh> make: *** No rule to make target `a/b/c/libz.so'.  Stop.

  yh> As you can see, make could not figure out full graph of implicit
  yh> rules on how to derive libz.so from libzz.so.1.2.

If you use the -d option make will show you what it's doing.  You are
expecting the implicit rule creation to proceed like this:

    a/b/c/libz.so -> a/b/c/libz.so.1 -> a/b/c/libz.so.1.2 \
        -> a/b/c/libzz.so -> a/b/c/libzz.so.1 -> a/b/c/libzz.so.1.2

However, this cannot work.  See the GNU make Manual, section "Chains of
Implicit Rules" in the chapter "Implicit Rules":

     No single implicit rule can appear more than once in a chain.  This
  means that `make' will not even consider such a ridiculous thing as
  making `foo' from `foo.o.o' by running the linker twice.  This
  constraint has the added benefit of preventing any infinite loop in the
  search for an implicit rule chain.

If you examine the -d output you'll see this in action:

    ...
   Looking for a rule with intermediate file `a/b/c/libzz.so'.
    Avoiding implicit rule recursion.
    Avoiding implicit rule recursion.
    Avoiding implicit rule recursion.
 No implicit rule found for `a/b/c/libz.so'.

-- 
-------------------------------------------------------------------------------
 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


_______________________________________________
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make

Reply via email to