1 cmake_minimum_required(VERSION 2.8)
3 project(target_include_directories)
5 file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/privateinclude")
6 file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/privateinclude/privateinclude.h" "#define PRIVATEINCLUDE_DEFINE\n")
8 file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/publicinclude")
9 file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/publicinclude/publicinclude.h" "#define PUBLICINCLUDE_DEFINE\n")
11 file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/interfaceinclude")
12 file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/interfaceinclude/interfaceinclude.h" "#define INTERFACEINCLUDE_DEFINE\n")
14 file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/poison")
15 file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/poison/common.h" "#error Should not be included\n")
17 file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/cure")
18 file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/cure/common.h" "#define CURE_DEFINE\n")
20 add_executable(target_include_directories
21 "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp"
23 target_include_directories(target_include_directories
24 PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/privateinclude"
25 PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/publicinclude"
26 INTERFACE "${CMAKE_CURRENT_BINARY_DIR}/interfaceinclude"
29 target_include_directories(target_include_directories
30 PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/poison"
32 target_include_directories(target_include_directories
33 BEFORE PUBLIC "$<$<STREQUAL:$<TARGET_PROPERTY:target_include_directories,TYPE>,EXECUTABLE>:${CMAKE_CURRENT_BINARY_DIR}/cure>"
36 # Has no effect because the target type is not SHARED_LIBRARY:
37 target_include_directories(target_include_directories
38 BEFORE PUBLIC "$<$<STREQUAL:$<TARGET_PROPERTY:target_include_directories,TYPE>,SHARED_LIBRARY>:${CMAKE_CURRENT_BINARY_DIR}/poison>"
41 add_executable(consumer
42 "${CMAKE_CURRENT_SOURCE_DIR}/consumer.cpp"
45 target_include_directories(consumer
47 $<TARGET_PROPERTY:target_include_directories,INTERFACE_INCLUDE_DIRECTORIES>