Re: [CMake] Question about transitive deps and static libs.
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 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 : > >> 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 > -- 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
Re: [CMake] Question about transitive deps and static libs.
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 : > 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
[CMake] Question about transitive deps and static libs.
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 privpubdeps.tgz Description: GNU Zip compressed data -- 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