@@ -18,24 +18,40 @@ find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
18
18
include (CheckCXXCompilerFlag)
19
19
include (CMakeParseArguments)
20
20
21
+ # Use the language standards abstraction if CMake supports it with the current compiler
22
+ if (NOT CMAKE_VERSION VERSION_LESS 3.1)
23
+ if (NOT CMAKE_CXX_STANDARD)
24
+ if (CMAKE_CXX14_STANDARD_COMPILE_OPTION)
25
+ set (CMAKE_CXX_STANDARD 14)
26
+ elseif (CMAKE_CXX11_STANDARD_COMPILE_OPTION)
27
+ set (CMAKE_CXX_STANDARD 11)
28
+ endif ()
29
+ endif ()
30
+ if (CMAKE_CXX_STANDARD)
31
+ set (CMAKE_CXX_EXTENSIONS OFF )
32
+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
33
+ endif ()
34
+ endif ()
35
+
36
+ # Fall back to heuristics
21
37
if (NOT PYBIND11_CPP_STANDARD AND NOT CMAKE_CXX_STANDARD)
22
- if (NOT MSVC )
38
+ if (MSVC )
39
+ set (PYBIND11_CPP_STANDARD /std:c++14)
40
+ else ()
23
41
check_cxx_compiler_flag("-std=c++14" HAS_CPP14_FLAG)
24
-
25
- if (HAS_CPP14_FLAG)
42
+ if (HAS_CPP14_FLAG)
26
43
set (PYBIND11_CPP_STANDARD -std=c++14)
27
44
else ()
28
45
check_cxx_compiler_flag("-std=c++11" HAS_CPP11_FLAG)
29
- if (HAS_CPP11_FLAG)
46
+ if (HAS_CPP11_FLAG)
30
47
set (PYBIND11_CPP_STANDARD -std=c++11)
31
- else ()
32
- message (FATAL_ERROR "Unsupported compiler -- pybind11 requires C++11 support!" )
33
48
endif ()
34
49
endif ()
35
- elseif (MSVC )
36
- set (PYBIND11_CPP_STANDARD /std:c++14)
37
50
endif ()
38
51
52
+ if (NOT PYBIND11_CPP_STANDARD)
53
+ message (FATAL_ERROR "Unsupported compiler -- pybind11 requires C++11 support!" )
54
+ endif ()
39
55
set (PYBIND11_CPP_STANDARD ${PYBIND11_CPP_STANDARD} CACHE STRING
40
56
"C++ standard flag, e.g. -std=c++11, -std=c++14, /std:c++14. Defaults to C++14 mode." FORCE)
41
57
endif ()
0 commit comments