One cause of spurious rebuilds

Daniel Jacobowitz drow@mvista.com
Sun Nov 2 18:57:00 GMT 2003


A result from the changed mkdep handling.  When math/m_isinf.o is first
built, there is no .d file for it.  The "m_%.c: sysdeps/foo_%.c" rule
triggers, and math/m_isinf.c is created as an intermediate dependency. 
Therefore it's removed when we're done with it.

During a second time through make, the .d is loaded.  m_isinf.o now
explicitly depends on m_isinf.c, so it is not an intermediate file; so the
fact that it is missing can no longer be ignored.  It is built, and this
time left around.  libm is rebuilt.

Solution?  I'm not sure; you might think that this would work:
.INTERMEDIATE: $(foreach s,.c .S l.c l.S f.c f.S,$(calls:s_%=$(objpfx)m_%$s))

but it doesn't; it declares that there is an intermediate target with each
of those names, and in fact there are only intermediate targets with half of
those names.  This causes it to try to build m_isinf.S instead of m_isinf.o.

I hate recursive make.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer



More information about the Libc-alpha mailing list