mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-25 06:35:12 +00:00
Utilize CMake's language standards abstraction when possible
This commit is contained in:
parent
f6e543b15e
commit
d730fbc0d5
@ -18,24 +18,40 @@ find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
|
|||||||
include(CheckCXXCompilerFlag)
|
include(CheckCXXCompilerFlag)
|
||||||
include(CMakeParseArguments)
|
include(CMakeParseArguments)
|
||||||
|
|
||||||
if(NOT PYBIND11_CPP_STANDARD AND NOT CMAKE_CXX_STANDARD)
|
# Use the language standards abstraction if CMake supports it with the current compiler
|
||||||
if(NOT MSVC)
|
if(NOT CMAKE_VERSION VERSION_LESS 3.1)
|
||||||
check_cxx_compiler_flag("-std=c++14" HAS_CPP14_FLAG)
|
if(NOT CMAKE_CXX_STANDARD)
|
||||||
|
if(CMAKE_CXX14_STANDARD_COMPILE_OPTION)
|
||||||
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
|
elseif(CMAKE_CXX11_STANDARD_COMPILE_OPTION)
|
||||||
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if(CMAKE_CXX_STANDARD)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if (HAS_CPP14_FLAG)
|
# Fall back to heuristics
|
||||||
|
if(NOT PYBIND11_CPP_STANDARD AND NOT CMAKE_CXX_STANDARD)
|
||||||
|
if(MSVC)
|
||||||
|
set(PYBIND11_CPP_STANDARD /std:c++14)
|
||||||
|
else()
|
||||||
|
check_cxx_compiler_flag("-std=c++14" HAS_CPP14_FLAG)
|
||||||
|
if(HAS_CPP14_FLAG)
|
||||||
set(PYBIND11_CPP_STANDARD -std=c++14)
|
set(PYBIND11_CPP_STANDARD -std=c++14)
|
||||||
else()
|
else()
|
||||||
check_cxx_compiler_flag("-std=c++11" HAS_CPP11_FLAG)
|
check_cxx_compiler_flag("-std=c++11" HAS_CPP11_FLAG)
|
||||||
if (HAS_CPP11_FLAG)
|
if(HAS_CPP11_FLAG)
|
||||||
set(PYBIND11_CPP_STANDARD -std=c++11)
|
set(PYBIND11_CPP_STANDARD -std=c++11)
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "Unsupported compiler -- pybind11 requires C++11 support!")
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
elseif(MSVC)
|
|
||||||
set(PYBIND11_CPP_STANDARD /std:c++14)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(NOT PYBIND11_CPP_STANDARD)
|
||||||
|
message(FATAL_ERROR "Unsupported compiler -- pybind11 requires C++11 support!")
|
||||||
|
endif()
|
||||||
set(PYBIND11_CPP_STANDARD ${PYBIND11_CPP_STANDARD} CACHE STRING
|
set(PYBIND11_CPP_STANDARD ${PYBIND11_CPP_STANDARD} CACHE STRING
|
||||||
"C++ standard flag, e.g. -std=c++11, -std=c++14, /std:c++14. Defaults to C++14 mode." FORCE)
|
"C++ standard flag, e.g. -std=c++11, -std=c++14, /std:c++14. Defaults to C++14 mode." FORCE)
|
||||||
endif()
|
endif()
|
||||||
|
Loading…
Reference in New Issue
Block a user