mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-05 21:31:08 -06:00
Entries of the `CPATH` environment variable are implicitly searched as
include directories by some C/C++ compilers. Since commit 5990ecb741
(Compute implicit include directories from compiler output, 2018-12-07,
v3.14.0-rc1~108^2) these entries are detected by CMake and included in
the `CMAKE_{C,CXX}_IMPLICIT_INCLUDE_DIRECTORIES` variables.
However, we should not exclude them from explicit specification via `-I`
or particularly `-isystem` because they are meant as user-specified
include directories that can be re-ordered without breaking compiler
builtin headers. In particular, we need explicit requests via
`include_directories` with the `SYSTEM` option to result in `-isystem`
so that third-party headers do not produce warnings.
Co-Author: Ben Boeckel <ben.boeckel@kitware.com>
Fixes: #19291
23 lines
888 B
CMake
23 lines
888 B
CMake
cmake_minimum_required (VERSION 3.14)
|
|
project(IncludeDirectoriesCPATH CXX)
|
|
message(STATUS "ENV{CPATH}: '$ENV{CPATH}'")
|
|
message(STATUS "CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES: '${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}'")
|
|
|
|
include(CheckCXXCompilerFlag)
|
|
check_cxx_compiler_flag(-Wunused-variable run_sys_includes_test)
|
|
if(run_sys_includes_test)
|
|
# The Bullseye wrapper appears to break the -isystem effect.
|
|
execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version OUTPUT_VARIABLE out ERROR_VARIABLE out)
|
|
if("x${out}" MATCHES "Bullseye")
|
|
set(run_sys_includes_test 0)
|
|
endif()
|
|
endif()
|
|
if (NOT run_sys_includes_test)
|
|
return()
|
|
endif()
|
|
|
|
add_library(consumer consumer.cpp)
|
|
add_library(consumer_system consumer.cpp)
|
|
target_compile_options(consumer_system PRIVATE -Werror=unused-variable)
|
|
target_include_directories(consumer_system SYSTEM PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/viacpath")
|