Skip to content

Commit 262653d

Browse files
author
Chuck Atkins
committed
Utilize CMake's language standards abstraction when possible
1 parent 0956a50 commit 262653d

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

tools/pybind11Tools.cmake

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,32 @@ include(CMakeParseArguments)
2020

2121
if(NOT PYBIND11_CPP_STANDARD AND NOT CMAKE_CXX_STANDARD)
2222
if(NOT MSVC)
23-
check_cxx_compiler_flag("-std=c++14" HAS_CPP14_FLAG)
24-
25-
if (HAS_CPP14_FLAG)
26-
set(PYBIND11_CPP_STANDARD -std=c++14)
23+
if(CMAKE_CXX14_EXTENSION_COMPILE_OPTION)
24+
set(PYBIND11_CPP_STANDARD ${CMAKE_CXX14_EXTENSION_COMPILE_OPTION})
25+
elseif(CMAKE_CXX14_STANDARD_COMPILE_OPTION)
26+
set(PYBIND11_CPP_STANDARD ${CMAKE_CXX14_STANDARD_COMPILE_OPTION})
27+
elseif(CMAKE_CXX11_EXTENSION_COMPILE_OPTION)
28+
set(PYBIND11_CPP_STANDARD ${CMAKE_CXX11_EXTENSION_COMPILE_OPTION})
29+
elseif(CMAKE_CXX11_STANDARD_COMPILE_OPTION)
30+
set(PYBIND11_CPP_STANDARD ${CMAKE_CXX11_STANDARD_COMPILE_OPTION})
2731
else()
28-
check_cxx_compiler_flag("-std=c++11" HAS_CPP11_FLAG)
29-
if (HAS_CPP11_FLAG)
30-
set(PYBIND11_CPP_STANDARD -std=c++11)
32+
check_cxx_compiler_flag("-std=c++14" HAS_CPP14_FLAG)
33+
if(HAS_CPP14_FLAG)
34+
set(PYBIND11_CPP_STANDARD -std=c++14)
3135
else()
32-
message(FATAL_ERROR "Unsupported compiler -- pybind11 requires C++11 support!")
36+
check_cxx_compiler_flag("-std=c++11" HAS_CPP11_FLAG)
37+
if (HAS_CPP11_FLAG)
38+
set(PYBIND11_CPP_STANDARD -std=c++11)
39+
endif()
3340
endif()
3441
endif()
3542
elseif(MSVC)
3643
set(PYBIND11_CPP_STANDARD /std:c++14)
3744
endif()
3845

46+
if(NOT PYBIND11_CPP_STANDARD)
47+
message(FATAL_ERROR "Unsupported compiler -- pybind11 requires C++11 support!")
48+
endif()
3949
set(PYBIND11_CPP_STANDARD ${PYBIND11_CPP_STANDARD} CACHE STRING
4050
"C++ standard flag, e.g. -std=c++11, -std=c++14, /std:c++14. Defaults to C++14 mode." FORCE)
4151
endif()

0 commit comments

Comments
 (0)