[cmake-developers] cmake build does too much work

Matthew Woehlke matthew.woehlke at kitware.com
Thu Dec 12 11:46:24 EST 2013


On 2013-12-11 20:00, Ben Boeckel wrote:
> On Wed, Dec 11, 2013 at 19:38:21 -0500, Matthew Woehlke wrote:
>> I don't think this is relevant? In these cases, a header is changing,
>> which will (hopefully) lead to the source files using that header
>> being rebuilt, which will cause the library to relink anyway. (And if
>> the sources *aren't* rebuilt, I don't think relinking will help?)
>
> I'm concerned about this:
>
>     (external)                 (internal)
>    template.hpp  <-- A.cpp -->  header.h
>           ^            ^
>           |            |
>           |            \- liba.so
>           |                 ^
>           |                 |
>           \-- B.cpp  <-- libb.so
>
> Where template.hpp changes (testing with 2.8.12.1 shows that touching
> template.hpp triggers a rebuild with Ninja, but not Unix Makefiles),

That sounds like a bug :-).

> internal_header.h changes and A.cpp gets recompiled, liba.so relinked
> and libb.so skipped because the ABI hasn't changed. The problem is that
> if something inlined from template.hpp is incompatible with what B.cpp
> has inlined, things need recompiled.

Yes. What I am missing is how re*linking* libb.so would help here? Don't 
you need to re*compile* B.o for this case?

Actually... back up for a moment. Since we're talking about dynamic 
libraries here (none of this applies to static I think; in that case you 
must always relink), how would a non-ABI change in liba.so cause the 
result of linking to be different? I didn't think dynamic linking 
involved *copying* symbols from liba into libb?

What am I missing?

-- 
Matthew




More information about the cmake-developers mailing list