<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">Le jeu. 4 oct. 2018 à 18:34, Björn Blissing <<a href="mailto:bjorn.blissing@vti.se">bjorn.blissing@vti.se</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="SV">
<div class="gmail-m_2570183529608527663WordSection1">
<p class="MsoNormal"><span>Hi Andrew,<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">That works, but as previously said. The third party find module I am using do not differentiate between debug and release libraries. To make matters even worse the keywords “optimized”
 and “debug” is already in the variable list, trying to split them will be painful.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">The workaround I am using right now is to have an IF-statement for the list option:<br>
<br>
if(${USE_FOOLIB})<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">    target_link_libraries(my_exe<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">    PUBLIC<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">        ${FOO_LIBRARIES}<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">    )<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">endif()<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">target_link_libraries(my_exe<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">    PUBLIC<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">         $<$<BOOL:${USE_BARLIB}>:bar><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">)<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">But that breaks the pattern with using generator expressions, as I do for the rest of my options.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">I don’t know if this should be considered a bug, but it seems really strange that generator expressions should break down for only this special case, i.e. the combination using lists
 with the conditional operator BOOL and using it inside target_link_libraries.</span></p></div></div></blockquote><div><br></div><div>I think you are right there is a bug.</div><div>When you put a list on the right hand-side of $<BOOL:, one gets unevaluated output.</div><div><br></div><div>If you try</div><div><br></div><div>>>>>> cut here <<<<</div><div><div>cmake_minimum_required(VERSION 3.12)</div><div><br></div><div>project(expansion_error LANGUAGES CXX)</div><div>add_executable(my_exe main.cpp)</div><div><br></div><div>option(USE_ANYLIB "Use foo.lib" ON)</div><div>option(USE_BARLIB "Use bar.lib" ON)</div><div><br></div><div>list(APPEND ANY_LIBRARIES any1 any2)</div><div><br></div><div>target_link_libraries(my_exe</div><div>    PUBLIC</div><div>         $<$<BOOL:${USE_ANYLIB}>:"${ANY_LIBRARIES}"></div><div>         $<$<BOOL:${USE_BARLIB}>:bar></div><div>)</div><div><br></div><div>add_custom_target(ShowMe</div><div>    COMMAND ${CMAKE_COMMAND} -E echo $<$<BOOL:${USE_ANYLIB}>:${ANY_LIBRARIES}></div><div>    COMMAND ${CMAKE_COMMAND} -E echo $<$<BOOL:${USE_BARLIB}>:bar></div><div>    VERBATIM</div><div>    )</div></div><div>>>>>>>>>> cut here <<<<<<<<<<<<<</div><div><br></div><div>then:</div><div>$ make ShowMe<br></div><div><br></div><div>gives:</div><div><div>$<1:any1 any2></div><div>bar</div></div><div>which seems wrong too.</div><div><br></div><div>In the TLL you get "$<1:any1 -lany2>" in either Makefile or ninja generator</div><div>whereas you get proper "-lbar" </div><div>      </div><div>I don't know why this happen but it really looks like a bug.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="SV"><div class="gmail-m_2570183529608527663WordSection1"><p class="MsoNormal"><span lang="EN-US"> <u></u>
<u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">I don’t know if other CMake functions will react similarly bad to the list/bool operator combo.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Regards,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Björn<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<div style="border-top:none;border-right:none;border-bottom:none;border-left:1.5pt solid blue;padding:0cm 0cm 0cm 4pt">
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0cm 0cm">
<p class="MsoNormal"><b>From:</b> Andrew Fuller <<a href="mailto:afuller@teradici.com" target="_blank">afuller@teradici.com</a>> <br>
<b>Sent:</b> Thursday, October 4, 2018 6:16 PM<br>
<b>To:</b> Björn Blissing <<a href="mailto:bjorn.blissing@vti.se" target="_blank">bjorn.blissing@vti.se</a>>; Eric Noulard <<a href="mailto:eric.noulard@gmail.com" target="_blank">eric.noulard@gmail.com</a>><br>
<b>Cc:</b> CMake Mailinglist <<a href="mailto:cmake@cmake.org" target="_blank">cmake@cmake.org</a>><br>
<b>Subject:</b> Re: [CMake] Trouble with conditional generator expression inside target_link_libraries<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div id="gmail-m_2570183529608527663divtagdefaultwrapper">
<p><span style="font-size:12pt;color:black">What about this:<u></u><u></u></span></p>
<p><span style="font-size:12pt;color:black"><u></u> <u></u></span></p>
<p><span style="font-size:12pt;color:black"><br>
list(APPEND FOO_LIBRARIES_OPT foo) <br>
list(APPEND FOO_LIBRARIES_DBG foo_d) <br>
<br>
target_link_libraries(my_exe <br>
   PUBLIC <br>
        debug "$<$<BOOL:${USE_FOOLIB}>:${FOO_LIBRARIES_DBG}>" <br>
        optimized "$<$<BOOL:${USE_FOOLIB}>:${FOO_LIBRARIES_OPT}>" <br>
        "$<$<BOOL:${USE_BARLIB}>:bar>" <br>
)<br>
<br>
A little more verbose.<u></u><u></u></span></p>
</div>
<div class="MsoNormal" align="center" style="text-align:center">
<hr size="3" width="98%" align="center">
</div>
<div id="gmail-m_2570183529608527663divRplyFwdMsg">
<p class="MsoNormal"><b><span style="color:black">From:</span></b><span style="color:black"> Björn Blissing <<a href="mailto:bjorn.blissing@vti.se" target="_blank">bjorn.blissing@vti.se</a>><br>
<b>Sent:</b> October 4, 2018 9:00:28 AM<br>
<b>To:</b> Andrew Fuller; Eric Noulard<br>
<b>Cc:</b> CMake Mailinglist<br>
<b>Subject:</b> RE: [CMake] Trouble with conditional generator expression inside target_link_libraries</span>
<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="gmail-m_2570183529608527663xmsonormal"><span lang="EN-US">Hi Andrew,</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xmsonormal" style="margin-bottom:12pt"><span lang="EN-US">When I put the genex inside double quotes I get:</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">optimized.lib;foo.lib;debug.lib;foo_d.lib;bar.lib; --- for both debug and release builds<br>
<br>
Regards,</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">Björn</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<div style="border-top:none;border-right:none;border-bottom:none;border-left:1.5pt solid blue;padding:0cm 0cm 0cm 4pt">
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0cm 0cm">
<p class="gmail-m_2570183529608527663xmsonormal"><b>From:</b> Andrew Fuller <<a href="mailto:afuller@teradici.com" target="_blank">afuller@teradici.com</a>>
<br>
<b>Sent:</b> Thursday, October 4, 2018 5:54 PM<br>
<b>To:</b> Björn Blissing <<a href="mailto:bjorn.blissing@vti.se" target="_blank">bjorn.blissing@vti.se</a>>; Eric Noulard <<a href="mailto:eric.noulard@gmail.com" target="_blank">eric.noulard@gmail.com</a>><br>
<b>Cc:</b> CMake Mailinglist <<a href="mailto:cmake@cmake.org" target="_blank">cmake@cmake.org</a>><br>
<b>Subject:</b> Re: [CMake] Trouble with conditional generator expression inside target_link_libraries<u></u><u></u></p>
</div>
</div>
<p class="gmail-m_2570183529608527663xmsonormal"> <u></u><u></u></p>
<div id="gmail-m_2570183529608527663x_divtagdefaultwrapper">
<p><span style="font-size:12pt;color:black">What happens if you put the genex inside double quotes?</span><u></u><u></u></p>
<p><span style="font-size:12pt;color:black"> </span><u></u><u></u></p>
<div>
<p class="gmail-m_2570183529608527663xmsonormal"><span style="font-size:12pt;color:black">target_link_libraries(my_exe</span><u></u><u></u></p>
</div>
<div>
<p class="gmail-m_2570183529608527663xmsonormal"><span style="font-size:12pt;color:black">    PUBLIC</span><u></u><u></u></p>
</div>
<div>
<p class="gmail-m_2570183529608527663xmsonormal"><span style="font-size:12pt;color:black">         "$<$<BOOL:${USE_FOOLIB}>:${FOO_LIBRARIES}>"</span><u></u><u></u></p>
</div>
<div>
<p class="gmail-m_2570183529608527663xmsonormal"><span style="font-size:12pt;color:black">         "$<$<BOOL:${USE_BARLIB}>:bar>"</span><u></u><u></u></p>
</div>
<div>
<p class="gmail-m_2570183529608527663xmsonormal"><span style="font-size:12pt;color:black">)</span><u></u><u></u></p>
</div>
<p class="gmail-m_2570183529608527663xmsonormal"><span style="font-size:12pt;color:black"> </span><u></u><u></u></p>
</div>
<div class="MsoNormal" align="center" style="text-align:center">
<hr size="3" width="98%" align="center">
</div>
<div id="gmail-m_2570183529608527663x_divRplyFwdMsg">
<p class="gmail-m_2570183529608527663xmsonormal"><b><span style="color:black">From:</span></b><span style="color:black"> CMake <<a href="mailto:cmake-bounces@cmake.org" target="_blank">cmake-bounces@cmake.org</a>> on behalf of Björn Blissing <<a href="mailto:bjorn.blissing@vti.se" target="_blank">bjorn.blissing@vti.se</a>><br>
<b>Sent:</b> October 4, 2018 8:49:19 AM<br>
<b>To:</b> Eric Noulard<br>
<b>Cc:</b> CMake Mailinglist<br>
<b>Subject:</b> Re: [CMake] Trouble with conditional generator expression inside target_link_libraries</span>
<u></u><u></u></p>
<div>
<p class="gmail-m_2570183529608527663xmsonormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="gmail-m_2570183529608527663xxmsonormal">Hi Eric,<u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"> <u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">I tried to do a self contained minimal example:
</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">cmake_minimum_required(VERSION 3.12)</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">project(expension_error LANGUAGES CXX)</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">add_executable(my_exe main.cpp)</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">option(USE_FOOLIB "Use foo.lib" ON)</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">option(USE_BARLIB "Use bar.lib" ON)</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">list(APPEND FOO_LIBRARIES optimized foo)</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">list(APPEND FOO_LIBRARIES debug foo_d)</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">target_link_libraries(my_exe</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">    PUBLIC</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">         $<$<BOOL:${USE_FOOLIB}>:${FOO_LIBRARIES}></span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">         $<$<BOOL:${USE_BARLIB}>:bar></span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">)</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">But when I run this script using CMake 3.12.2, it expands to something even worse:</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">$<1:optimized;foo.lib;foo_d>.lib;bar.lib --- for debug builds</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">$<1:optimized;foo.lib;>.lib;bar.lib-- for release builds</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">So something goes really wrong when I try to use a list inside a conditional generator expression inside target_link_libraries().</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">Regards,</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">Björn</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<div style="border-top:none;border-right:none;border-bottom:none;border-left:1.5pt solid blue;padding:0cm 0cm 0cm 4pt">
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0cm 0cm">
<p class="gmail-m_2570183529608527663xxmsonormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> Eric Noulard <<a href="mailto:eric.noulard@gmail.com" target="_blank">eric.noulard@gmail.com</a>>
<br>
<b>Sent:</b> Thursday, October 4, 2018 5:10 PM<br>
<b>To:</b> Björn Blissing <<a href="mailto:bjorn.blissing@vti.se" target="_blank">bjorn.blissing@vti.se</a>><br>
<b>Cc:</b> CMake Mailinglist <<a href="mailto:cmake@cmake.org" target="_blank">cmake@cmake.org</a>><br>
<b>Subject:</b> Re: [CMake] Trouble with conditional generator expression inside target_link_libraries</span><u></u><u></u></p>
</div>
</div>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<div>
<p class="gmail-m_2570183529608527663xxmsonormal" style="margin-bottom:12pt"><span lang="EN-US"> </span><u></u><u></u></p>
<div>
<div>
<p class="gmail-m_2570183529608527663xxmsonormal">Le jeu. 4 oct. 2018 à 16:53, Björn Blissing <<a href="mailto:bjorn.blissing@vti.se" target="_blank">bjorn.blissing@vti.se</a>> a écrit :<u></u><u></u></p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<div>
<div>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">Hello Eric,</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">The minimal example was just to display the expansion error. In real life the code uses a Boolean variable (and the rest of the CMake code is much larger as well).</span> <u></u><u></u></p>
</div>
</div>
</blockquote>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<div>
<div>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">It was just to show the expansion error you get if you try to use a conditional generator expression inside a target_link_libraries function.</span><u></u><u></u></p>
</div>
</div>
</blockquote>
<div>
<p class="gmail-m_2570183529608527663xxmsonormal"> <u></u><u></u></p>
</div>
<div>
<p class="gmail-m_2570183529608527663xxmsonormal">Sometimes the devil is hiding in the details.<u></u><u></u></p>
</div>
<div>
<p class="gmail-m_2570183529608527663xxmsonormal">Do ou manage to reproduce the genex expansion error on a toy example?<u></u><u></u></p>
</div>
<div>
<p class="gmail-m_2570183529608527663xxmsonormal"> <u></u><u></u></p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<div>
<div>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">I do agree that using it would be simpler if I could use:</span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">     $<$<CONFIG:Debug>:${MYLIBS_DEBUG}></span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">     $<$<CONFIG:Release>:${MYLIBS_OPTIMIZED}></span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="gmail-m_2570183529608527663xxmsonormal"><span lang="EN-US">But since I use a third party find module the MYLIB_LIBRARIES variable is not separated into these categories. I was hoping to avoid rewriting this external find module.</span><u></u><u></u></p>
</div>
</div>
</blockquote>
<div>
<p class="gmail-m_2570183529608527663xxmsonormal"> <u></u><u></u></p>
</div>
<div>
<p class="gmail-m_2570183529608527663xxmsonormal">You can perfectly write a CMake helper function which takes MYLIB_LIBRARIES as input and spit out MYLIBS_DEBUG, MYLIBS_OPTIMIZED as an output.<u></u><u></u></p>
</div>
<div>
<p class="gmail-m_2570183529608527663xxmsonormal">This way you don't have to rewrite 3rd party code and keep your code clean.<u></u><u></u></p>
</div>
</div>
<div>
<p class="gmail-m_2570183529608527663xxmsonormal"> <u></u><u></u></p>
</div>
<p class="gmail-m_2570183529608527663xxmsonormal">-- <u></u><u></u></p>
<div>
<div>
<div>
<div>
<div>
<p class="gmail-m_2570183529608527663xxmsonormal">Eric<u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>Eric<br></div></div></div></div></div></div></div></div></div></div></div></div></div></div>