TARGET_PROPERTY generator not working with INTERFACE_SYSTEM_INCLUDE_DIRECTORIES
CMake 3.13.4: If I create a SYSTEM
include directory then attempt to add it to another target using the TARGET_PROPERTY
generator, it doesn't work. The header is treated as a normal directory.
Here's an example:
$ cat >CMakeLists.txt <<EOF
cmake_minimum_required(VERSION 3.13)
project(Test C)
add_library(base STATIC base.c)
target_include_directories(base SYSTEM PUBLIC /tmp/system)
add_library(inter STATIC inter.c)
set_property(TARGET inter APPEND PROPERTY
INCLUDE_DIRECTORIES $<TARGET_PROPERTY:base,INTERFACE_INCLUDE_DIRECTORIES>)
set_property(TARGET inter APPEND PROPERTY
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES $<TARGET_PROPERTY:base,INTERFACE_SYSTEM_INCLUDE_DIRECTORIES>)
EOF
$ touch base.c inter.c
When I build I see that base
treats /tmp/system
as a system header file:
/usr/bin/cc -isystem /tmp/system -o CMakeFiles/base.dir/base.c.o -c /.../tst3/base.c
but, inter
incorrectly treats it as a normal header file:
/usr/bin/cc -I/tmp/system -o CMakeFiles/inter.dir/inter.c.o -c /.../tst3/inter.c
It looks like CMake does some matching up of header path strings to determine which are to be considered system or not; maybe the generator expressions aren't being resolved before that matching is performed, or something?