Going over some CMakeLists.txt files I’ve written, I came across the following snippet:
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()
Various compiler versions of gcc and clang use different flags to specify C++11 support, namely older ones accept -std=c++0x and newer one -std=c++11. The above snippets detects which is the right one for the compiler being used and adds the flag to the CXX_FLAGS.
Thanks for the snippet !
Thanks…your snippet saved my time!!
CMake 3.1 added direct support for specifying the C++ standard version to use in a compiler-independent way, including handling of whether or not to allow compiler extensions (which affects the standard library your targets link to). The following article goes through the relevant features and recommended usage:
https://crascit.com/2015/03/28/enabling-cxx11-in-cmake/