CMake Find C++11 Support #14

Open
carlsonp opened this Issue May 19, 2013 · 8 comments

Projects

None yet

3 participants

@carlsonp

Saw this the other day, looks quite useful for finding C++ 11 support:

http://stackoverflow.com/a/13571695

@godbyk
godbyk commented May 19, 2013

Here's the EnableCXX11.cmake file that I wrote. I've only used it with g++ and clang++ so far. From what I understand, MSVC doesn't require any command-line switches to enable C++11—it's enabled by default. I haven't tested any compilers under Windows yet.

# - Use C++11 standard
#
# Author:
#   Kevin M. Godby <kevin@godby.org>
#

# Note that Microsoft Visual C++ compiler enables C++11 by default

if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR CMAKE_COMPILER_IS_GNUCXX)
    include(CheckCXXCompilerFlag)
    check_cxx_compiler_flag(--std=c++11 SUPPORTS_STD_CXX11)
    check_cxx_compiler_flag(--std=c++0x SUPPORTS_STD_CXX01)
    if(SUPPORTS_STD_CXX11)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11")
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --std=c++11")
    elseif(SUPPORTS_STD_CXX01)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++0x")
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --std=c++0x")
    else()
        message(ERROR "Compiler does not support --std=c++11 or --std=c++0x.")
    endif()
endif()

Drop this in your modules search path and then add include(EnableCXX11) to your CMakeLists.txt file.

@rpavlik
Owner
rpavlik commented Aug 16, 2013

Best I've seen so far is git://anongit.kde.org/scratch/dakon/cmake-cxx11.git browsable online at http://quickgit.kde.org/?p=scratch%2Fdakon%2Fcmake-cxx11.git - looks like it's being prepared for integration into cmake.

@godbyk
godbyk commented Aug 16, 2013

That's the best I've found, too. It was a bit overkill for my immediate needs (as I'm only using a couple compilers and I knew what features they supported). I suspect that they could make use of more feature tests. I'm glad to hear it's being integrated into cmake.

@carlsonp

Looks like CMake 3.1 provides better support for C++11 and C++14 as explained here.

@godbyk
godbyk commented Oct 11, 2015

I've used CXX_STANDARD and it works pretty well. I've also used the WriteCompilerDetectionHeader module to define macros for C++11 features that may not be present in all compilers (e.g., override, nothrow).

@rpavlik
Owner
rpavlik commented Oct 11, 2015

Yep. Where we can't demand 3.1, like OSVR, I just manually do a little test, can see the OSVR Core repo for example

@rpavlik
Owner
rpavlik commented Oct 11, 2015

Yep. Where we can't demand 3.1, like OSVR, I just manually do a little test, can see the OSVR Core repo for example

@rpavlik
Owner
rpavlik commented Oct 11, 2015

Think I should either stick the hacky module from OSVR in here, or just close this bug as fixed upstream 😁

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment