[CMake] Question about transitive deps and static libs.

Petr Kmoch petr.kmoch at gmail.com
Wed Apr 19 02:41:47 EDT 2017


Hi,

I will offer an alternative phrasing based on what makes me personally
understand this best. It might potentially be useful for the documentation
update you're planning.

`target_link_libraries(A B)` specifies that the code in A needs B to be
added to the produced binary when the binary is *linked*. However, static
libraries are not produced by linking, but by an archiver or librarian
tool. Therefore, B needs to be present for the actual linking step when
this happens further down the chain (when linking an executable or shared
library), regardless of the "privacy" of B in A.

Petr

On 18 April 2017 at 17:44, Eric Noulard <eric.noulard at gmail.com> wrote:

> Answering to myself.
>
> This mail by Craig explains a lot:
> https://cmake.org/pipermail/cmake/2016-May/063400.html
>
> Sorry for the noise. I guess I have my answer in there.
> I'll try to propose a documentation update based on Craig's explanation
> because,
> https://cmake.org/cmake/help/v3.8/manual/cmake-buildsystem.
> 7.html#transitive-usage-requirements
>
> does not contains clues on specific treatment for static libs.
>
>
>
>
> 2017-04-18 16:30 GMT+02:00 Eric Noulard <eric.noulard at gmail.com>:
>
>> I have a question concerning the transitive linking of dependence and
>> static libs.
>>
>> I'm working a on prokect where some shared lib are linked to static lib
>> (do not ask me why).
>> So I do:
>>
>> set(CMAKE_POSITION_INDEPENDENT_CODE True)
>>
>> then I have a bunch of libraries (either static or shared) which depends
>> on each other.
>> I use PRIVATE and PUBLIC specification with target_link_librairies.
>>
>> Now I expected that the transitive link properties would be fullfilled
>> simply i.e. that
>> when some target LIB1 is PRIVATEly link against say pthread. Then if a
>> another
>> lib LIB2 is linked against LIB1 then then "pthread" wouldn't be dragged
>> into the link
>> interface of LIB2.
>>
>> It seems that this is not as simple as I thought and as soon as LIB1 is
>> static
>> then LIB2 gets the dependency (be it PRIVATE or PUBLIC)...
>>
>> Find attached a small example.
>>
>> Is this a bug, a feature or something I didn't catch?
>>
>>
>> --
>> Eric
>>
>
>
>
> --
> Eric
>
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Kitware offers various services to support the CMake community. For more
> information on each offering, please visit:
>
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at http://www.kitware.com/
> opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/cmake
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20170419/6a294533/attachment.html>


More information about the CMake mailing list