| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- # - Finds if the compiler has C++11 support
- # This module can be used to detect compiler flags for using C++11, and checks
- # a small subset of the language.
- #
- # The following variables are set:
- # CXX11_FLAGS - flags to add to the CXX compiler for C++11 support
- # CXX11_FOUND - true if the compiler supports C++11
- #
- if(CXX11_FLAGS)
- set(CXX11_FOUND TRUE)
- return()
- endif()
- include(CheckCXXSourceCompiles)
- include(FindPackageHandleStandardArgs)
- if(MSVC)
- set(CXX11_FLAG_CANDIDATES
- " "
- )
- else()
- set(CXX11_FLAG_CANDIDATES
- #gcc
- "-std=gnu++11"
- "-std=gnu++0x"
- #Gnu and Intel Linux
- "-std=c++11"
- "-std=c++0x"
- #Microsoft Visual Studio, and everything that automatically accepts C++11
- " "
- #Intel windows
- "/Qstd=c++11"
- "/Qstd=c++0x"
- )
- endif()
- set(CXX11_TEST_SOURCE
- "
- int main()
- {
- int n[] = {4,7,6,1,2};
- int r;
- auto f = [&](int j) { r = j; };
-
- for (auto i : n)
- f(i);
- return 0;
- }
- ")
- foreach(FLAG ${CXX11_FLAG_CANDIDATES})
- set(SAFE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
- set(CMAKE_REQUIRED_FLAGS "${FLAG}")
- unset(CXX11_FLAG_DETECTED CACHE)
- message(STATUS "Try C++11 flag = [${FLAG}]")
- check_cxx_source_compiles("${CXX11_TEST_SOURCE}" CXX11_FLAG_DETECTED)
- set(CMAKE_REQUIRED_FLAGS "${SAFE_CMAKE_REQUIRED_FLAGS}")
- if(CXX11_FLAG_DETECTED)
- set(CXX11_FLAGS_INTERNAL "${FLAG}")
- break()
- endif(CXX11_FLAG_DETECTED)
- endforeach(FLAG ${CXX11_FLAG_CANDIDATES})
- set(CXX11_FLAGS "${CXX11_FLAGS_INTERNAL}" CACHE STRING "C++11 Flags")
- find_package_handle_standard_args(CXX11 DEFAULT_MSG CXX11_FLAGS)
- mark_as_advanced(CXX11_FLAGS)
|