CMakeLists.txt 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. add_executable(target_include_directories
  14. "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp"
  15. )
  16. target_include_directories(target_include_directories
  17. PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/privateinclude"
  18. PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/publicinclude"
  19. INTERFACE "${CMAKE_CURRENT_BINARY_DIR}/interfaceinclude"
  20. )
  21. target_include_directories(target_include_directories
  22. PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/poison"
  23. )
  24. target_include_directories(target_include_directories
  25. BEFORE PUBLIC "$<$<STREQUAL:$<TARGET_PROPERTY:target_include_directories,TYPE>,EXECUTABLE>:${CMAKE_CURRENT_BINARY_DIR}/cure>"
  26. )
  27. # Has no effect because the target type is not SHARED_LIBRARY:
  28. target_include_directories(target_include_directories
  29. BEFORE PUBLIC "$<$<STREQUAL:$<TARGET_PROPERTY:target_include_directories,TYPE>,SHARED_LIBRARY>:${CMAKE_CURRENT_BINARY_DIR}/poison>"
  30. )
  31. add_executable(consumer
  32. "${CMAKE_CURRENT_SOURCE_DIR}/consumer.cpp"
  33. )
  34. target_include_directories(consumer
  35. PRIVATE
  36. $<TARGET_PROPERTY:target_include_directories,INTERFACE_INCLUDE_DIRECTORIES>
  37. relative_dir
  38. relative_dir/$<TARGET_PROPERTY:NAME>
  39. )
  40. # Test no items
  41. target_include_directories(consumer
  42. PRIVATE
  43. )
  44. target_include_directories(consumer
  45. BEFORE PRIVATE
  46. )
  47. target_include_directories(consumer
  48. SYSTEM BEFORE PRIVATE
  49. )
  50. target_include_directories(consumer
  51. SYSTEM PRIVATE
  52. )
  53. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  54. add_library(imp UNKNOWN IMPORTED)
  55. get_target_property(_res imp INCLUDE_DIRECTORIES)
  56. if (_res)
  57. message(SEND_ERROR "include_directories populated the INCLUDE_DIRECTORIES target property")
  58. endif()