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/