[CMake] Transitive behavior of target_link_libraries between shared/static

Robert Dailey rcdailey.lists at gmail.com
Tue Jul 18 14:33:16 EDT 2017


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
<post at hendrik-sattler.de> wrote:
>
>
> Am 18. Juli 2017 18:02:40 MESZ schrieb Eric Noulard <eric.noulard at gmail.com>:
>>2017-07-17 17:31 GMT+02:00 Robert Dailey <rcdailey.lists at 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.


More information about the CMake mailing list