[CMake] [EXTERNAL] Re: Check if C++11 flag / standard was indeed found
Adams, Brian M
briadam at sandia.gov
Thu Nov 9 15:52:09 EST 2017
Thanks Robert, I presumed something like that was happening under the hood, but I'm trying to ask a slightly different couple questions.
Suppose I set CMAKE_CXX_STANDARD=11 and CMAKE_CXX_STANDARD_REQUIRED=TRUE and configure a C++ project with at least one C++ target. Is there any variable or other means to tell if CMake was able to find and properly use a C++11 compliant compiler?
I ask because if I set these variables and configure the project with a non-C++11-compliant compiler my build just trundles on until the first compile error due to lack of C++11. Or if I'm using a version of CMake that doesn't support compiler features for the toolchain in use (even if the compiler supports C++11), CMake might fail to add the necessary -std=c++11 flag, but doesn't warn or error about it.
So, in that case, is there any way I can detect whether the version of CMake being run supports compiler features for the compiler in use? (As presumably that would be a reasonable indicator of language feature support.)
Thanks,
Brian
-----Original Message-----
From: Robert Maynard [mailto:robert.maynard at kitware.com]
Sent: Tuesday, October 31, 2017 5:27 PM
To: Adams, Brian M <briadam at sandia.gov>
Cc: cmake at cmake.org
Subject: [EXTERNAL] Re: [CMake] Check if C++11 flag / standard was indeed found
Hi,
CMake itself does this kind of inspection inside the CompileFlags.cmake file (
https://gitlab.kitware.com/cmake/cmake/blob/v3.9.3/CompileFlags.cmake#L62
). While this exact example is for sunpro, it should be a good example of how to make a similar check for Intel.
On Tue, Oct 31, 2017 at 2:17 PM, Adams, Brian M <briadam at sandia.gov> wrote:
> Longer term, I plan to follow better practice and include compiler
> language feature checks for specific C++11 features and let CMake
> deduce the necessary language standard.
>
>
>
> In the meantime, I’m trying to implement a stopgap solution to warn
> the user if CMake doesn’t know how to add a C++11 flag for the
> CMAKE_CXX_COMPILER in use, so they can add it themselves. For
> example, CMake C++11 support for Intel wasn’t added until 3.6, but a
> user could still use CMake 3.1 to build our software if they explicitly add the “-std=c++11” flag.
>
>
>
> I’m setting
>
> CMAKE_CXX_STANDARD=11
>
> CMAKE_CXX_STANDARD_REQUIRED=TRUE
>
>
>
> My hope was that if the CMake version in use doesn’t know how to add
> the necessary C++11 compile flag, that this would result in an error,
> but it doesn’t seem to.
>
>
>
> Is there a way I can detect whether CMake was able to add the
> necessary
> C++11 flag, rather than letting the build run forward until a compile
> failure?
>
>
>
> My fallback plan might be some conditionals that check specific
> (CMAKE_CXX_COMPILER_ID, CMAKE_VERSION) pairs and warn the user for
> cases where that version of CMake doesn’t have
> <ID>-CXX-FeatureTests.cmake (which I’m assuming is an indicator of
> being able to add the C++11 compile flags for that compiler ID…)
>
>
>
> Brian
>
>
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Kitware offers various services to support the CMake community. For
> more information on each offering, please visit:
>
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/cmake
More information about the CMake
mailing list