<div dir="ltr">Thank you for clearing that up Marc! I'll continue to use target_link_libraries (... INTERFACE ...) for imported libraries.</div><br><div class="gmail_quote"><div dir="ltr">On Mon, Dec 18, 2017 at 3:06 AM CHEVRIER, Marc <<a href="mailto:marc.chevrier@sap.com">marc.chevrier@sap.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">







<div bgcolor="white" lang="EN-GB" link="blue" vlink="purple">
<div class="m_8740677914005751720WordSection1">
<p class="MsoNormal"><span>Hi,<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span>Your assumption is erroneous. INTERFACE keyword is related to dependencies behavior against target (see
<a href="https://cmake.org/cmake/help/git-master/command/target_link_libraries.html" target="_blank">
target_link_libraries</a> documentation). It do not specify type of target, so IMPORTED libraries will work as well.<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span style="font-size:12.0pt;color:black">From: </span></b><span style="font-size:12.0pt;color:black">Saad Khattak <<a href="mailto:saadrustam@gmail.com" target="_blank">saadrustam@gmail.com</a>><br>
<b>Date: </b>Saturday 16 December 2017 at 00:39<br>
<b>To: </b>"CHEVRIER, Marc" <<a href="mailto:marc.chevrier@sap.com" target="_blank">marc.chevrier@sap.com</a>><br>
<b>Cc: </b>Craig Scott <<a href="mailto:craig.scott@crascit.com" target="_blank">craig.scott@crascit.com</a>>, Cmake Mailing List <<a href="mailto:cmake@cmake.org" target="_blank">cmake@cmake.org</a>></span></p></div></div></div><div bgcolor="white" lang="EN-GB" link="blue" vlink="purple"><div class="m_8740677914005751720WordSection1"><div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm"><p class="MsoNormal"><span style="font-size:12.0pt;color:black"><br>
<b>Subject: </b>Re: [CMake] Using SET_TARGET_PROPERTIES and IMPORTED_LINK_INTERFACE_LIBRARIES<u></u><u></u></span></p></div></div></div><div bgcolor="white" lang="EN-GB" link="blue" vlink="purple"><div class="m_8740677914005751720WordSection1">
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thank you Marc. I found that the following also works: <u></u>
<u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">target_link_libraries(LibD INTERFACE LibA LibB)<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">However, my guess is that in the future the above may break as it is assuming LibD is an INTERFACE instead of an IMPORTED library. I'll switch to your version instead as it seems to be more correct.<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Thu, Dec 14, 2017 at 3:40 AM CHEVRIER, Marc <<a href="mailto:marc.chevrier@sap.com" target="_blank">marc.chevrier@sap.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal">I think you can fill a bug about erroneous behaviour when a list is specified with command set_target_properties for property IMPORTED_LINK_INTERFACE_LIBRARIES.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">Another way to specify the property is to use command set_property which supports multiple values for a property:<u></u><u></u></p>
<p class="MsoNormal">set_property(TARGET LibD PROPERTY IMPORTED_LINK_INTERFACE_LIBRARIES LibA LibB)<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span style="font-size:12.0pt;color:black">From:
</span></b><span style="font-size:12.0pt;color:black">CMake <<a href="mailto:cmake-bounces@cmake.org" target="_blank">cmake-bounces@cmake.org</a>> on behalf of Saad Khattak <<a href="mailto:saadrustam@gmail.com" target="_blank">saadrustam@gmail.com</a>><br>
<b>Date: </b>Thursday 14 December 2017 at 03:20<br>
<b>To: </b>Craig Scott <<a href="mailto:craig.scott@crascit.com" target="_blank">craig.scott@crascit.com</a>><br>
<b>Cc: </b>Cmake Mailing List <<a href="mailto:cmake@cmake.org" target="_blank">cmake@cmake.org</a>><br>
<b>Subject: </b>Re: [CMake] Using SET_TARGET_PROPERTIES and IMPORTED_LINK_INTERFACE_LIBRARIES</span><u></u><u></u></p>
</div>
</div>
</div>
<div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks Craig for your reply.
<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">The issue is that both "LibA" and "LibB" have been set using "add_library(LibA STATIC IMPORTED)" and "add_library(LibB IMPORTED)" and both have some properties that are being set.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Ultimately, CMake recognizes LibA and LibB as CMake library projects, and they have their own include and link directories and other library dependencies.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">The nice thing about using LibA directly is then LibD inherits all the include and link directories of LibA and LibB which then get inherited by any library or executable that includes
 LibD (and ultimately, the whole point of modern CMake):<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Courier",serif;color:#757575">set_target_properties(LibD</span><u></u><u></u></p>
</div>
</div>
</div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Courier",serif;color:#757575">  PROPERTIES</span><u></u><u></u></p>
</div>
</div>
</div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Courier",serif;color:#757575">    IMPORTED_LINK_INTERFACE_LIBRARIES LibA #cmake recognizes LibA as IMPORTED CMake libraries</span><u></u><u></u></p>
</div>
</div>
</div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Courier",serif;color:#757575">)</span><u></u><u></u></p>
</div>
</div>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">If I use "LibA;LibB" then first, I have to manually extract the library names of the imported CMake libraries LibA and LibB. Then, I have to call "target_include_directories" and
 "target_link_libraries" for all dependencies of LibA and LibB, even though these dependencies were defined in their own respective CMake files when calling "add_library(LibA STATIC IMPORTED)"<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Courier",serif;color:#757575">set_target_properties(LibD</span><u></u><u></u></p>
</div>
</div>
</div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Courier",serif;color:#757575">  PROPERTIES</span><u></u><u></u></p>
</div>
</div>
</div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Courier",serif;color:#757575">    IMPORTED_LINK_INTERFACE_LIBRARIES "LibA;LibB" #cmake no longer recognizes LibA and LibB as IMPORTED CMake libraries</span><u></u><u></u></p>
</div>
</div>
</div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Courier",serif;color:#757575">)</span><u></u><u></u></p>
</div>
</div>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Regards,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Saad <u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal">On Wed, Dec 13, 2017 at 4:32 PM Craig Scott <<a href="mailto:craig.scott@crascit.com" target="_blank">craig.scott@crascit.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<div>
<p class="MsoNormal">On Thu, Dec 14, 2017 at 8:22 AM, Saad Khattak <<a href="mailto:saadrustam@gmail.com" target="_blank">saadrustam@gmail.com</a>> wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">Hi,
<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I have several imported libraries:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">LibA<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">LibB<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">LibC<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Where each imported library has been populated by (where ${LIB_NAME} is either LibA, LibB or LibC):<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">add_library(${LIB_NAME} STATIC IMPORTED)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">And each library has the properties IMPORT_LOCATION_${CONFIGURATION} set properly:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">set_target_properties(${LIB_NAME}<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    PROPERTIES IMPORTED_LOCATION_DEBUG # same for release<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">   "location/of/library.lib"<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    )<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Now let's say I have another imported library LibD that depends on LibA and LibB such that any executable that uses LibD must also link with LibA and LibB. To do that, I use:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">set_target_properties(LibD<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  PROPERTIES<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    IMPORTED_LINK_INTERFACE_LIBRARIES LibA LibB<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  )<u></u><u></u></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div>
</div>
<div>
<div>
<div>
<div>
<p class="MsoNormal">You probably want this instead:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div>
</div>
<div>
<blockquote style="margin-left:30.0pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Courier",serif">set_target_properties(LibD</span><u></u><u></u></p>
</div>
</div>
</div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Courier",serif">  PROPERTIES</span><u></u><u></u></p>
</div>
</div>
</div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Courier",serif">    IMPORTED_LINK_INTERFACE_LIBRARIES "LibA;LibB"</span><u></u><u></u></p>
</div>
</div>
</div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Courier",serif">)</span><u></u><u></u></p>
</div>
</div>
</div>
</blockquote>
</div>
<div>
<div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Note that if the property value is a list, you have to provide it as a single string (i.e.
<span style="font-family:"Courier",serif">"LibA;LibB"</span> rather than <span style="font-family:"Courier",serif">
LibA LibB</span>)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div>
</div>
<div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<p class="MsoNormal">--
<u></u><u></u></p>
<div>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal">Craig Scott<u></u><u></u></p>
<div>
<p class="MsoNormal">Melbourne, Australia<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><a href="https://crascit.com" target="_blank">https://crascit.com</a><u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
</div></div></blockquote></div>