<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2017-07-18 19:15 GMT+02:00 Hendrik Sattler <span dir="ltr"><<a href="mailto:post@hendrik-sattler.de" target="_blank">post@hendrik-sattler.de</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="gmail-"><br>
<br>
Am 18. Juli 2017 18:02:40 MESZ schrieb Eric Noulard <<a href="mailto:eric.noulard@gmail.com">eric.noulard@gmail.com</a>>:<br>
>2017-07-17 17:31 GMT+02:00 Robert Dailey <<a href="mailto:rcdailey.lists@gmail.com">rcdailey.lists@gmail.com</a>>:<br>
><br>
>> Suppose I have the following:<br>
>><br>
>> ```<br>
>> add_library( A STATIC ${files} )<br>
>><br>
>> add_library( B SHARED ${more_files} )<br>
>> target_link_libraries( B PUBLIC A )<br>
>><br>
>> add_library( C STATIC ${even_more_files} )<br>
>> target_link_libraries( C PUBLIC B )<br>
>><br>
>><br>
>> add_executable( D ${exe_files} )<br>
>> target_link_libraries( D PRIVATE C )<br>
>> ```<br>
>><br>
>> Does the linker command for target `D` ever see target A's static<br>
>link<br>
>> library? I'm hoping the only thing the linker gets is `libB.so` and<br>
>> `libC.a`, without `libA.a`.<br>
>><br>
><br>
>I guess it does otherwise you may be missing symbols.<br>
>As explain by Peter some time ago:<br>
>  <a href="https://cmake.org/pipermail/cmake/2017-April/065347.html" rel="noreferrer" target="_blank">https://cmake.org/pipermail/<wbr>cmake/2017-April/065347.html</a><br>
>when you<br>
>target_link_libraries( B PUBLIC A )<br>
><br>
>with A being STATIC you do not really link A into B (which is shared in<br>
>your example)<br>
<br>
</span>You confused PUBLIC and INTERFACE in your response.<br>
target_link_libraries( B PUBLIC A ) DOES link A into B but only the symbols needed by B.<br>
<br>
The link to the old post has it all right.<br></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br></blockquote></div><div><br></div><div>Thanks for the clarification Hendrik,</div><div><br></div><div>The thing I wasn't sure is that when B is shared and A is static</div><div><br></div><div>target_link_libraries(B PUBLIC A) or even</div><div>target_link_libraries(B PRIVATE A)<br></div><div><br></div><div>was effectively putting objects from A needed by B into B.</div><div><br></div><div>My use case was when B and A were STATIC.</div><div><br></div><div>I'll try an example in order to have concrete example at hand.</div><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>Eric<br></div></div></div></div></div>
</div></div>