mirror of
https://github.com/pybind/pybind11.git
synced 2026-03-14 20:27:47 +00:00
Make PYBIND11_CPP_STANDARD work under MSVC
Under MSVC we were ignoring PYBIND11_CPP_STANDARD and simply not passing any standard (which makes MSVC default to its C++14 mode). MSVC 2015u3 added the `/std:c++14` and `/std:c++latest` flags; the latter, under MSVC 2017, enables some C++17 features (such as `std::optional` and `std::variant`), so it is something we need to start supporting under MSVC. This makes the PYBIND11_CPP_STANDARD cmake variable work under MSVC, defaulting it to /std:c++14 (matching the default -std=c++14 for non-MSVC). It also adds a new appveyor test running under MSVC 2017 with /std:c++latest, which runs (and passes) the `std::optional`/`std::variant` tests. Also updated the documentation to clarify the c++ flags and add show MSVC flag examples.
This commit is contained in:
@@ -92,17 +92,28 @@ regular LTO if ``-flto=thin`` is not available.
|
||||
Configuration variables
|
||||
-----------------------
|
||||
|
||||
By default, pybind11 will compile modules with the latest C++ standard
|
||||
available on the target compiler. To override this, the standard flag can
|
||||
be given explicitly in ``PYBIND11_CPP_STANDARD``:
|
||||
By default, pybind11 will compile modules with the C++14 standard, if available
|
||||
on the target compiler, falling back to C++11 if C++14 support is not
|
||||
available. Note, however, that this default is subject to change: future
|
||||
pybind11 releases are expected to migrate to newer C++ standards as they become
|
||||
available. To override this, the standard flag can be given explicitly in
|
||||
``PYBIND11_CPP_STANDARD``:
|
||||
|
||||
.. code-block:: cmake
|
||||
|
||||
# Use just one of these:
|
||||
# GCC/clang:
|
||||
set(PYBIND11_CPP_STANDARD -std=c++11)
|
||||
set(PYBIND11_CPP_STANDARD -std=c++14)
|
||||
set(PYBIND11_CPP_STANDARD -std=c++1z) # Experimental C++17 support
|
||||
# MSVC:
|
||||
set(PYBIND11_CPP_STANDARD /std:c++14)
|
||||
set(PYBIND11_CPP_STANDARD /std:c++latest) # Enables some MSVC C++17 features
|
||||
|
||||
add_subdirectory(pybind11) # or find_package(pybind11)
|
||||
|
||||
Note that this and all other configuration variables must be set **before** the
|
||||
call to ``add_subdiretory`` or ``find_package``. The variables can also be set
|
||||
call to ``add_subdirectory`` or ``find_package``. The variables can also be set
|
||||
when calling CMake from the command line using the ``-D<variable>=<value>`` flag.
|
||||
|
||||
The target Python version can be selected by setting ``PYBIND11_PYTHON_VERSION``
|
||||
|
||||
Reference in New Issue
Block a user