<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Aug 22, 2018 at 1:39 PM, Ian Henriksen <span dir="ltr"><<a href="mailto:insertinterestingnamehere@gmail.com" target="_blank">insertinterestingnamehere@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><br><br><div class="gmail_quote"><span class="gmail-"><div dir="ltr">On Tue, Aug 21, 2018 at 6:40 PM Craig Scott <<a href="mailto:craig.scott@crascit.com" target="_blank">craig.scott@crascit.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Aug 22, 2018 at 7:18 AM, Robert Dailey <span dir="ltr"><<a href="mailto:rcdailey.lists@gmail.com" target="_blank">rcdailey.lists@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">On Tue, Aug 21, 2018 at 3:47 PM Craig Scott <<a href="mailto:craig.scott@crascit.com" target="_blank">craig.scott@crascit.com</a>> wrote:<br>
> Excuse the brevity, but it sounds like you might be looking for the CXX_EXTENSIONS target property (sorry if I've misunderstood your problem, let me know why it isn't appropriate if so). See the following article for a more complete overview of this and related properties:<br>
><br>
> <a href="https://crascit.com/2015/03/28/enabling-cxx11-in-cmake/" rel="noreferrer" target="_blank">https://crascit.com/2015/03/<wbr>28/enabling-cxx11-in-cmake/</a><br>
<br>
Unfortunately that's not the same. Extensions manage C++ language<br>
features and STL capabilities, but -stdlib is for selecting an STL<br>
implementation, AFAIK. Such as GNU STL and LLVM STL (which is libc++<br>
to clang).<br>
</blockquote></div><br></div></div><div dir="ltr"><div class="gmail_extra">Sorry, yes I misunderstood your problem. After a little digging, it seems like you probably <a href="https://stackoverflow.com/a/50407611/1938798" target="_blank">shouldn't be using the -stdlib option on Linux</a> anyway. FWIW, for Android, the <a href="https://android.googlesource.com/platform/ndk/+/master/docs/Roadmap.md" target="_blank">roadmap</a> is converging on a single STL implementation too.</div></div></blockquote><div><br></div></span><div>All that first link says is that -stdlib is a flag that is specific to clang and that it shouldn't be used with gcc. You can use clang on Linux with either libstdc++ or libc++. I often use libc++ on Linux by setting CMAKE_CXX_FLAGS on the command line, though I'll admit that for me it's usually just to check if problems that come up are OS dependent, compiler dependent, or standard library dependent. You have to be careful since libstdc++ and libc++ have incompatible ABIs, but it's a useful feature. That said, I have no idea if specifying the standard library implementation merits handling at the CMake level since only clang supports switching anyway.</div></div></div></blockquote><div><br></div><div><br></div><div>Good clarification, thanks. I was only thinking GCC on Linux and wasn't considering clang (which was a bit dumb on my part - blame the lack of coffee early in the morning ;) ).</div><div><br></div><div>Getting back to Robert's original query, the only part of the CMake code base that I can see attempting to account for a -stdlib option is for detection of gcc include paths, and this is only for Eclipse and CodeBlocks generators (according to the comments in Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake). It doesn't seem to be related to providing any support for manipulating it in a project. The only other place -stdlib seems to be mentioned is in the setup of the macOS release build of CMake itself, which isn't relevant to the discussion here.</div><div><br></div><div>If CMake were to offer direct support for -stdlib, it sounds like it would be a clang-specific feature, so a clang-specific target property and/or variable may be a way forward, analogous to the way it is done for Android. Alternatively, maybe it could be done with generator expressions, but it would be a bit verbose and harder to ensure the same -stdlib was used consistently throughout if many targets were involved. But maybe just a fairly simple check is good enough here, something like this (using directory properties instead of variables):</div><div><br></div><div>if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT ANDROID)</div><div>    add_compile_options(-stdlib=libc++)</div><div>    # Presumably need the above for linking too, maybe other options missing as well</div><div>    add_link_options(-stdlib=libc++)   # New command on CMake master, not in 3.12 release</div><div>endif()</div><div><br></div><div>The linking comments above are in response to discussions in a <a href="https://gitlab.kitware.com/cmake/cmake/issues/18275">recent issue</a> also related to the -stdlib option. One down side of the above is no transitive dependency details, something that a target property could achieve. I'll pause here and see what others think.</div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div><br></div><div>Just my two cents though.</div><div><br></div><div>Best,</div><div><br></div><div>Ian</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><span class="gmail-"><div dir="ltr"><div class="gmail_extra"><br></div><div class="gmail_extra">Regarding your earlier comment:</div><div class="gmail_extra"><br></div><div class="gmail_extra"></div></div><div dir="ltr"><div class="gmail_extra"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">I'll explain a bit why I'm asking. I noticed that for code bases that<br>work on Android plus other UNIX platforms, they unconditionally<br>specify `-stdlib=libc++`, however this doesn't work on Ubuntu by<br>default, which uses gnu stl + gcc/clang. So  you get compiler errors.<br>There's no way for me to "search" a platform to see if it is eligible<br>for the libc++ flag, I simply have to either disable it completely or<br>conditionally include it based on target platform and/or toolchain.<br>None of these really address the root cause.</blockquote></div></div><div dir="ltr"><div class="gmail_extra"><pre><font face="arial, helvetica, sans-serif">If you are trying to control which STL to use for Android builds, CMake variables like CMAKE_ANDROID_STL_TYPE are probably the more appropriate way to do that rather than hard-coding compiler flags. This would also mean that non-Android builds won't be affected since they would simply ignore that variable (and target properties it may affect) and should then pick up the right STL implementation automatically.The Android-specific variable would ideally be set in a toolchain file rather than in the project itself.</font></pre></div></div><div dir="ltr"><div class="gmail_extra"><pre><font face="arial, helvetica, sans-serif"><br></font><span style="font-family:arial,sans-serif;white-space:pre-wrap">-- </span><br></pre><div class="gmail-m_7546021760211932851m_1688090709620576207gmail_signature"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr">Craig Scott<br><div>Melbourne, Australia</div><div><a href="https://crascit.com" target="_blank">https://crascit.com</a><br></div><div><br></div><div>New book released: <a href="https://crascit.com/professional-cmake/" target="_blank">Professional CMake: A Practical Guide</a><br></div></div></div></div></div></div></div>
</div></div></span>
-- <br>
<br>
Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
<br>
Please keep messages on-topic and check the CMake FAQ at: <a href="http://www.cmake.org/Wiki/CMake_FAQ" rel="noreferrer" target="_blank">http://www.cmake.org/Wiki/<wbr>CMake_FAQ</a><br>
<br>
Kitware offers various services to support the CMake community. For more information on each offering, please visit:<br>
<br>
CMake Support: <a href="http://cmake.org/cmake/help/support.html" rel="noreferrer" target="_blank">http://cmake.org/cmake/help/<wbr>support.html</a><br>
CMake Consulting: <a href="http://cmake.org/cmake/help/consulting.html" rel="noreferrer" target="_blank">http://cmake.org/cmake/help/<wbr>consulting.html</a><br>
CMake Training Courses: <a href="http://cmake.org/cmake/help/training.html" rel="noreferrer" target="_blank">http://cmake.org/cmake/help/<wbr>training.html</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/<wbr>opensource/opensource.html</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="https://cmake.org/mailman/listinfo/cmake" rel="noreferrer" target="_blank">https://cmake.org/mailman/<wbr>listinfo/cmake</a><br>
</blockquote></div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr">Craig Scott<br><div>Melbourne, Australia</div><div><a href="https://crascit.com" target="_blank">https://crascit.com</a><br></div><div><br></div><div>New book released: <a href="https://crascit.com/professional-cmake/" target="_blank">Professional CMake: A Practical Guide</a><br></div></div></div></div></div></div></div>
</div></div>