mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-22 05:05:11 +00:00
add_module: allow include as SYSTEM (#1416)
pybind11 headers passed via the `pybind11_add_module` CMake function can now be included as `SYSTEM` includes (`-isystem`). This allows to set stricter (or experimental) warnings in calling projects that might throw otherwise in headers a user of pybind11 can not influence.
This commit is contained in:
parent
3a94561c4d
commit
435dbdd114
@ -59,7 +59,7 @@ function with the following signature:
|
|||||||
.. code-block:: cmake
|
.. code-block:: cmake
|
||||||
|
|
||||||
pybind11_add_module(<name> [MODULE | SHARED] [EXCLUDE_FROM_ALL]
|
pybind11_add_module(<name> [MODULE | SHARED] [EXCLUDE_FROM_ALL]
|
||||||
[NO_EXTRAS] [THIN_LTO] source1 [source2 ...])
|
[NO_EXTRAS] [SYSTEM] [THIN_LTO] source1 [source2 ...])
|
||||||
|
|
||||||
This function behaves very much like CMake's builtin ``add_library`` (in fact,
|
This function behaves very much like CMake's builtin ``add_library`` (in fact,
|
||||||
it's a wrapper function around that command). It will add a library target
|
it's a wrapper function around that command). It will add a library target
|
||||||
@ -86,6 +86,10 @@ latter optimizations are never applied in ``Debug`` mode. If ``NO_EXTRAS`` is
|
|||||||
given, they will always be disabled, even in ``Release`` mode. However, this
|
given, they will always be disabled, even in ``Release`` mode. However, this
|
||||||
will result in code bloat and is generally not recommended.
|
will result in code bloat and is generally not recommended.
|
||||||
|
|
||||||
|
By default, pybind11 and Python headers will be included with ``-I``. In order
|
||||||
|
to include pybind11 as system library, e.g. to avoid warnings in downstream
|
||||||
|
code with warn-levels outside of pybind11's scope, set the option ``SYSTEM``.
|
||||||
|
|
||||||
As stated above, LTO is enabled by default. Some newer compilers also support
|
As stated above, LTO is enabled by default. Some newer compilers also support
|
||||||
different flavors of LTO such as `ThinLTO`_. Setting ``THIN_LTO`` will cause
|
different flavors of LTO such as `ThinLTO`_. Setting ``THIN_LTO`` will cause
|
||||||
the function to prefer this flavor if available. The function falls back to
|
the function to prefer this flavor if available. The function falls back to
|
||||||
|
@ -110,10 +110,10 @@ endfunction()
|
|||||||
|
|
||||||
# Build a Python extension module:
|
# Build a Python extension module:
|
||||||
# pybind11_add_module(<name> [MODULE | SHARED] [EXCLUDE_FROM_ALL]
|
# pybind11_add_module(<name> [MODULE | SHARED] [EXCLUDE_FROM_ALL]
|
||||||
# [NO_EXTRAS] [THIN_LTO] source1 [source2 ...])
|
# [NO_EXTRAS] [SYSTEM] [THIN_LTO] source1 [source2 ...])
|
||||||
#
|
#
|
||||||
function(pybind11_add_module target_name)
|
function(pybind11_add_module target_name)
|
||||||
set(options MODULE SHARED EXCLUDE_FROM_ALL NO_EXTRAS THIN_LTO)
|
set(options MODULE SHARED EXCLUDE_FROM_ALL NO_EXTRAS SYSTEM THIN_LTO)
|
||||||
cmake_parse_arguments(ARG "${options}" "" "" ${ARGN})
|
cmake_parse_arguments(ARG "${options}" "" "" ${ARGN})
|
||||||
|
|
||||||
if(ARG_MODULE AND ARG_SHARED)
|
if(ARG_MODULE AND ARG_SHARED)
|
||||||
@ -130,7 +130,11 @@ function(pybind11_add_module target_name)
|
|||||||
|
|
||||||
add_library(${target_name} ${lib_type} ${exclude_from_all} ${ARG_UNPARSED_ARGUMENTS})
|
add_library(${target_name} ${lib_type} ${exclude_from_all} ${ARG_UNPARSED_ARGUMENTS})
|
||||||
|
|
||||||
target_include_directories(${target_name}
|
if(ARG_SYSTEM)
|
||||||
|
set(inc_isystem SYSTEM)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_include_directories(${target_name} ${inc_isystem}
|
||||||
PRIVATE ${PYBIND11_INCLUDE_DIR} # from project CMakeLists.txt
|
PRIVATE ${PYBIND11_INCLUDE_DIR} # from project CMakeLists.txt
|
||||||
PRIVATE ${pybind11_INCLUDE_DIR} # from pybind11Config
|
PRIVATE ${pybind11_INCLUDE_DIR} # from pybind11Config
|
||||||
PRIVATE ${PYTHON_INCLUDE_DIRS})
|
PRIVATE ${PYTHON_INCLUDE_DIRS})
|
||||||
|
Loading…
Reference in New Issue
Block a user