1cmake_minimum_required(VERSION 3.14) 2enable_language(C) 3 4add_library(foo1 STATIC empty.c) 5target_include_directories(foo1 PUBLIC include) 6target_link_libraries(foo1 PRIVATE foo2 foo3 foo4) 7 8add_library(foo2 STATIC empty.c) 9target_include_directories(foo2 PUBLIC $<TARGET_PROPERTY:foo1,INCLUDE_DIRECTORIES>) 10 11add_library(foo3 STATIC empty.c) 12target_include_directories(foo3 PUBLIC $<TARGET_PROPERTY:foo2,INCLUDE_DIRECTORIES>) 13 14add_library(foo4 STATIC empty.c) 15target_include_directories(foo4 PUBLIC $<TARGET_PROPERTY:foo3,INCLUDE_DIRECTORIES>) 16 17add_library (foo5 SHARED empty.c) 18set_property(TARGET foo5 PROPERTY INCLUDE_DIRECTORIES "$<$<COMPILE_LANGUAGE:CUDA>:/include/CUDA>" "$<$<COMPILE_LANGUAGE:Fortran>:/include/Fortran>") 19set_property(TARGET foo5 PROPERTY INTERFACE_INCLUDE_DIRECTORIES "$<$<COMPILE_LANGUAGE:CUDA>:/include/CUDA>" "$<$<COMPILE_LANGUAGE:Fortran>:/include/Fortran>") 20set_property(TARGET foo5 PROPERTY CUSTOM ";;") 21 22# Evaluate a genex that looks up INCLUDE_DIRECTORIES on multiple targets. 23file(GENERATE OUTPUT out.txt CONTENT "INCLUDES1:$<TARGET_PROPERTY:foo4,INCLUDE_DIRECTORIES>\nINCLUDES2:>$<TARGET_PROPERTY:foo5,INTERFACE_INCLUDE_DIRECTORIES><\nINCLUDES3:>$<TARGET_PROPERTY:foo5,INCLUDE_DIRECTORIES><\nCUSTOM:>$<TARGET_PROPERTY:foo5,CUSTOM><\n") 24