CMakeLists.txt 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. cmake_minimum_required(VERSION 2.8)
  2. project(target_include_directories)
  3. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/privateinclude")
  4. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/privateinclude/privateinclude.h" "#define PRIVATEINCLUDE_DEFINE\n")
  5. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/publicinclude")
  6. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/publicinclude/publicinclude.h" "#define PUBLICINCLUDE_DEFINE\n")
  7. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/interfaceinclude")
  8. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/interfaceinclude/interfaceinclude.h" "#define INTERFACEINCLUDE_DEFINE\n")
  9. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/poison")
  10. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/poison/common.h" "#error Should not be included\n")
  11. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/cure")
  12. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/cure/common.h" "#define CURE_DEFINE\n")
  13. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/linkedinclude")
  14. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/linkedinclude/linkedinclude.h" "#define LINKEDINCLUDE_DEFINE\n")
  15. add_executable(target_include_directories
  16. "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp"
  17. )
  18. target_include_directories(target_include_directories
  19. PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/privateinclude"
  20. PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/publicinclude"
  21. INTERFACE "${CMAKE_CURRENT_BINARY_DIR}/interfaceinclude"
  22. )
  23. target_include_directories(target_include_directories
  24. PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/poison"
  25. )
  26. target_include_directories(target_include_directories
  27. BEFORE PUBLIC "$<$<TARGET_DEFINED:target_include_directories>:${CMAKE_CURRENT_BINARY_DIR}/cure>"
  28. )
  29. # Has no effect because the target is not defined:
  30. target_include_directories(target_include_directories
  31. BEFORE PUBLIC "$<$<TARGET_DEFINED:notdefined>:${CMAKE_CURRENT_BINARY_DIR}/poison>"
  32. )
  33. add_executable(consumer
  34. "${CMAKE_CURRENT_SOURCE_DIR}/consumer.cpp"
  35. )
  36. add_library(linked UNKNOWN IMPORTED)
  37. set_property(TARGET linked PROPERTY
  38. INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/linkedinclude")
  39. target_include_directories(consumer
  40. PRIVATE
  41. $<TARGET_PROPERTY:target_include_directories,INTERFACE_INCLUDE_DIRECTORIES>
  42. $<LINKED:linked>
  43. relative_dir
  44. )