One cause of spurious rebuilds
Roland McGrath
roland@redhat.com
Mon Jan 19 04:21:00 GMT 2004
> 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))
What about:
.PRECIOUS: m_%.c m_%.S
? That ought to prevent the targets of the generated rules from being
intermediate files, so they are never deleted. I think that's what we
want, so the .d files can be complete and not refer to anything that might
wind up missing.
Thanks,
Roland
More information about the Libc-alpha
mailing list