Maybe I'm missing something here, but that linked article doesn't
really address my specific case. And his definition is technically
correct, as long as CMake is smart enough to handle the case where
(again in my example) A does not need to be explicitly linked to D
because they were already linked into B (since it's a shared library).
Link dependencies of B should be firewalled to downstream targets.
However, include dependencies for example may be needed downstream
since B's public headers may require them.

I could create a sandbox using my example to verify the behavior, but
i thought it would be quicker to ask here to see if anyone knew.

On Tue, Jul 18, 2017 at 12:15 PM, Hendrik Sattler
<p...@hendrik-sattler.de> wrote:
>
>
> Am 18. Juli 2017 18:02:40 MESZ schrieb Eric Noulard <eric.noul...@gmail.com>:
>>2017-07-17 17:31 GMT+02:00 Robert Dailey <rcdailey.li...@gmail.com>:
>>
>>> Suppose I have the following:
>>>
>>> ```
>>> add_library( A STATIC ${files} )
>>>
>>> add_library( B SHARED ${more_files} )
>>> target_link_libraries( B PUBLIC A )
>>>
>>> add_library( C STATIC ${even_more_files} )
>>> target_link_libraries( C PUBLIC B )
>>>
>>>
>>> add_executable( D ${exe_files} )
>>> target_link_libraries( D PRIVATE C )
>>> ```
>>>
>>> Does the linker command for target `D` ever see target A's static
>>link
>>> library? I'm hoping the only thing the linker gets is `libB.so` and
>>> `libC.a`, without `libA.a`.
>>>
>>
>>I guess it does otherwise you may be missing symbols.
>>As explain by Peter some time ago:
>>  https://cmake.org/pipermail/cmake/2017-April/065347.html
>>when you
>>target_link_libraries( B PUBLIC A )
>>
>>with A being STATIC you do not really link A into B (which is shared in
>>your example)
>
> You confused PUBLIC and INTERFACE in your response.
> target_link_libraries( B PUBLIC A ) DOES link A into B but only the symbols 
> needed by B.
>
> The link to the old post has it all right.
>
> HS
>
>
> --
> Diese Nachricht wurde von meinem Android-Mobiltelefon mit K-9 Mail gesendet.
-- 

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

Reply via email to