[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