[CMake] C++ standard version fallbacks.

Craig Scott craig.scott at crascit.com
Mon Jun 5 18:35:09 EDT 2017


On Tue, Jun 6, 2017 at 7:50 AM, Stephen Kelly <steveire at gmail.com> wrote:

> Roger Leigh wrote:
>
> > Hi folks,
> >
> > I'm currently using this logic to use C++14 with a fallback to C++11
> > when C++14 is unavailable:
> >
> >    if(NOT CMAKE_CXX_STANDARD)
> >      set(CMAKE_CXX_STANDARD 14)
> >    endif()
> >    if(NOT CMAKE_CXX_STANDARD_REQUIRED)
> >      set(CMAKE_CXX_STANDARD_REQUIRED 11)
> >    endif()
> >
> > which seems to work OK.
> >
> > However, for some new stuff, I'd like to use C++17 when available, but
> > fall back to C++14, C++11 or C++98.  Is it possible to do this?
>
> Probably set CMAKE_CXX_STANDARD
>
> without CMAKE_CXX_STANDARD_REQUIRED (That variable doesn't really make
> sense
> to me and I think it is overused when not needed).
>

If you don't set CMAKE_CXX_STANDARD_REQUIRED, then there's no guarantee you
get any particular minimum standard. Roger's example (sorry Roger!)
highlights part of the confusion about this latter variable (and the target
property it ultimately controls). He appears to be setting it expecting it
to specify a minimum version, but that's not how it works. It is expected
to be a boolean which says whether CMAKE_CXX_STANDARD must be honoured or
not, which most developers (myself included) tend to find unintuitive.
Roger's use would actually make it a bit better, if that was how it worked,
but unfortunately there's currently no way to set a *minimum* standard
version, only either "I'd like to use *up to *this version" or "I must use
exactly this version". That's back to front, in my view, and pretty much
all uses of these that I see want either "I'd like *at least* this version"
or "I must use exactly this version".


-- 
Craig Scott
Melbourne, Australia
https://crascit.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20170606/312500c3/attachment.html>


More information about the CMake mailing list