CMake SYSTEM INTERFACE #4160
Unanswered
severinstrobl
asked this question in
Q&A
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
When adding pybind11 to a CMake project via
add_subdirectory()
, theSYSTEM
keyword is added to the specification of the include directory inpybind11/CMakeLists.txt
Lines 185 to 186 in fac23b6
While this is certainly the right way to handle include directories in sub-projects, it can result in problems for some environments: For HPC systems, it is not uncommon for module files to add their respective include path to the
CPATH
environment variable. When building a CMake project shipping pybind11 as a third-party module and adding it viaadd_subdirectory()
, a different installation of pybind11 may be used during compilation in case an external module providing pybind11 is loaded at the same time. This is a result of the default ordering of include paths by the compiler, where entries in$CPATH
are searched before the ones provided via-isystem
(resulting from theSYSTEM INTERFACE
).Admittedly, this is a rather obscure problem, but maybe a workaround exists for such setups. If not, would it be possible to allow disabling the addition of
SYSTEM
in pybind11 via an configuration option? As a interim fix, in my version of pybind11 I added such an option to selectively controlpybind11_system
pybind11/CMakeLists.txt
Line 87 in fac23b6
via
allowing me to disable
SYSTEM
viaset(pybind11_SYSTEM_INTERFACE off)
.I'd be very happy to hear any suggestions or comments regarding this issue!
Beta Was this translation helpful? Give feedback.
All reactions