fix: address review points from @YannickJadoul

This commit is contained in:
Henry Schreiner 2020-07-29 15:02:53 -04:00 committed by Henry Schreiner
parent 6ec1775fff
commit 1b92cd1703
4 changed files with 46 additions and 31 deletions

View File

@ -26,7 +26,7 @@ install:
$env:CMAKE_INCLUDE_PATH = "eigen-eigen-67e894c6cd8f;$env:CMAKE_INCLUDE_PATH" $env:CMAKE_INCLUDE_PATH = "eigen-eigen-67e894c6cd8f;$env:CMAKE_INCLUDE_PATH"
build_script: build_script:
- cmake -G "%CMAKE_GENERATOR%" -A "%CMAKE_ARCH%" - cmake -G "%CMAKE_GENERATOR%" -A "%CMAKE_ARCH%"
-DPYBIND11_CPP_STANDARD=/std:c++14 -DCMAKE_CXX_STANDARD=14
-DPYBIND11_WERROR=ON -DPYBIND11_WERROR=ON
-DDOWNLOAD_CATCH=ON -DDOWNLOAD_CATCH=ON
-DCMAKE_SUPPRESS_REGENERATION=1 -DCMAKE_SUPPRESS_REGENERATION=1

View File

@ -103,9 +103,9 @@ standard explicitly with
.. code-block:: cmake .. code-block:: cmake
# Use just one of these: set(CMAKE_CXX_STANDARD 14) # or 11, 14, 17, 20
set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) # optional, ensure standard is supported
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_EXTENSIONS OFF) # optional, keep compiler extensionsn off
The variables can also be set when calling CMake from the command line using The variables can also be set when calling CMake from the command line using
@ -120,7 +120,11 @@ For example:
.. code-block:: bash .. code-block:: bash
cmake -DPYBIND11_PYTHON_VERSION=3.6 .. cmake -DPYBIND11_PYTHON_VERSION=3.6 ..
# or
# Another method:
cmake -DPYTHON_EXECUTABLE=/path/to/python ..
# You will often see this idiom:
cmake -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") .. cmake -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") ..
find_package vs. add_subdirectory find_package vs. add_subdirectory
@ -144,12 +148,19 @@ the pybind11 repository :
.. code-block:: bash .. code-block:: bash
# Classic CMake
cd pybind11 cd pybind11
mkdir build mkdir build
cd build cd build
cmake .. cmake ..
make install make install
# CMake 3.15+
cd pybind11
cmake -S . -B build
cmake --build build -j 2 # Build on 2 cores
cmake --install build
Once detected, the aforementioned ``pybind11_add_module`` can be employed as Once detected, the aforementioned ``pybind11_add_module`` can be employed as
before. The function usage and configuration variables are identical no matter before. The function usage and configuration variables are identical no matter
if pybind11 is added as a subdirectory or found as an installed package. You if pybind11 is added as a subdirectory or found as an installed package. You
@ -198,11 +209,11 @@ to an independently constructed (through ``add_library``, not
.. code-block:: cmake .. code-block:: cmake
cmake_minimum_required(3.9)
set(CMAKE_CXX_VISIBILITY_PRESET hidden) set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON) set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON) # CMake 3.9+ required
or set teh corisponding property (without the ``CMAKE_``) on the targets or set the corresponding property (without the ``CMAKE_``) on the targets
manually. manually.
Embedding the Python interpreter Embedding the Python interpreter

View File

@ -60,17 +60,15 @@
@PACKAGE_INIT@ @PACKAGE_INIT@
set(PN pybind11) # Location of pybind11/pybind11.h
set(pybind11_INCLUDE_DIR "${PACKAGE_PREFIX_DIR}/@CMAKE_INSTALL_INCLUDEDIR@")
# location of pybind11/pybind11.h set(pybind11_LIBRARY "")
set(${PN}_INCLUDE_DIR "${PACKAGE_PREFIX_DIR}/@CMAKE_INSTALL_INCLUDEDIR@") set(pybind11_DEFINITIONS USING_pybind11)
set(${PN}_LIBRARY "") check_required_components(pybind11)
set(${PN}_DEFINITIONS USING_${PN})
check_required_components(${PN}) # Make the FindPythonLibsNew.cmake module available
# make detectable the FindPythonLibsNew.cmake module
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
include(pybind11Tools) include(pybind11Tools)
@ -79,19 +77,20 @@ include(pybind11Tools)
# Don't include targets if this file is being picked up by another # Don't include targets if this file is being picked up by another
# project which has already built this as a subproject # project which has already built this as a subproject
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
if(NOT TARGET ${PN}::pybind11) if(NOT TARGET pybind11::pybind11)
include("${CMAKE_CURRENT_LIST_DIR}/${PN}Targets.cmake") include("${CMAKE_CURRENT_LIST_DIR}/pybind11Targets.cmake")
find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} MODULE REQUIRED) find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} MODULE REQUIRED)
set_property(TARGET ${PN}::pybind11 APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PYTHON_INCLUDE_DIRS})
set_property(TARGET ${PN}::pybind11 APPEND PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES ${PYTHON_INCLUDE_DIRS})
set_property(TARGET ${PN}::embed APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${PYTHON_LIBRARIES})
if(WIN32 OR CYGWIN)
set_property(TARGET ${PN}::module APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${PYTHON_LIBRARIES})
endif()
get_property(_iid TARGET ${PN}::pybind11 PROPERTY INTERFACE_INCLUDE_DIRECTORIES) set_property(TARGET pybind11::pybind11 APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PYTHON_INCLUDE_DIRS})
get_property(_ill TARGET ${PN}::module PROPERTY INTERFACE_LINK_LIBRARIES) set_property(TARGET pybind11::pybind11 APPEND PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES ${PYTHON_INCLUDE_DIRS})
set(${PN}_INCLUDE_DIRS ${_iid})
set(${PN}_LIBRARIES ${_ico} ${_ill}) set_property(TARGET pybind11::embed APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${PYTHON_LIBRARIES})
set_property(TARGET pybind11::module APPEND PROPERTY INTERFACE_LINK_LIBRARIES
"$<$<OR:$<PLATFORM_ID:Windows>,$<PLATFORM_ID:Cygwin>>:$<BUILD_INTERFACE:${PYTHON_LIBRARIES}>>")
get_property(_iid TARGET pybind11::pybind11 PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
get_property(_ill TARGET pybind11::module PROPERTY INTERFACE_LINK_LIBRARIES)
set(pybind11_INCLUDE_DIRS ${_iid})
set(pybind11_LIBRARIES ${_ico} ${_ill})
endif() endif()

View File

@ -27,15 +27,20 @@ find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
include(CheckCXXCompilerFlag) include(CheckCXXCompilerFlag)
include(CMakeParseArguments) include(CMakeParseArguments)
# Use the language standards abstraction if CMake supports it with the current compiler # Warn or error if old variable name used
if(PYBIND11_CPP_STANDARD) if(PYBIND11_CPP_STANDARD)
message(WARNING "USE -DCMAKE_CXX_STANDARD=11 instead of PYBIND11_PYTHON_VERSION")
if(NOT CMAKE_CXX_STANDARD) if(NOT CMAKE_CXX_STANDARD)
string(REGEX MATCH string(REGEX MATCH
[=[..^]=] [=[..^]=]
VAL VAL
"${PYBIND11_CPP_STANDARD}") "${PYBIND11_CPP_STANDARD}")
set(CMAKE_CXX_STANDARD ${VAL}) set(supported_standards 11 14 17 20)
if("${VAL}" IN_LIST supported_standards)
message(WARNING "USE -DCMAKE_CXX_STANDARD=${VAL} instead of PYBIND11_PYTHON_VERSION")
set(CMAKE_CXX_STANDARD ${VAL})
else()
message(FATAL_ERROR "PYBIND11_CPP_STANDARD should be replaced with CMAKE_CXX_STANDARD")
endif()
endif() endif()
endif() endif()