2017-07-17 17:31 GMT+02:00 Robert Dailey <[email protected]>:

> 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)
but you add A as a PUBLIC item of the link interface of B such that when
actual linking
occurs if you build an executable linked to B then A is automagically
brought to the link step.

More info on that topic by Craig:
https://cmake.org/pipermail/cmake/2016-May/063400.html


> It seems like A to everyone outside of B should just be a set of
> public include directories and compile definitions, since the link
> file aspect of it should be hidden across shared library boundaries.
>

No it is not, because the binary object inside A are NOT embedded into B.
If you want that then you need to make A an OBJECT library and not a STATIC
library.



> Hoping someone can explain how this works. I want to make sure static
> libs sitting behind shared libs in the dependency tree do not get
> exposed.
>

My understanding is that you cannot do what you want with static lib.
You can do that with OBJECT lib though.
Knowing that you cannot use target_link_libraries with OBJECT lib:
https://cmake.org/cmake/help/v3.9/manual/cmake-buildsystem.7.html#object-libraries

Hope this helps.

-- 
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

Reply via email to