CMakeLists.txt 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. cmake_minimum_required (VERSION 2.6)
  2. project(IncludeDirectories)
  3. if (((CMAKE_C_COMPILER_ID STREQUAL GNU AND CMAKE_C_COMPILER_VERSION VERSION_GREATER 4.4)
  4. OR CMAKE_C_COMPILER_ID STREQUAL Clang OR CMAKE_C_COMPILER_ID STREQUAL AppleClang)
  5. AND (CMAKE_GENERATOR STREQUAL "Unix Makefiles"
  6. OR CMAKE_GENERATOR STREQUAL "Ninja"
  7. OR (CMAKE_GENERATOR STREQUAL "Xcode" AND NOT XCODE_VERSION VERSION_LESS 6.0)))
  8. include(CheckCXXCompilerFlag)
  9. check_cxx_compiler_flag(-Wunused-variable run_sys_includes_test)
  10. if(run_sys_includes_test)
  11. # The Bullseye wrapper appears to break the -isystem effect.
  12. execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version OUTPUT_VARIABLE out ERROR_VARIABLE out)
  13. if("x${out}" MATCHES "Bullseye")
  14. set(run_sys_includes_test 0)
  15. endif()
  16. endif()
  17. if (run_sys_includes_test)
  18. add_subdirectory(SystemIncludeDirectories)
  19. endif()
  20. endif()
  21. file(WRITE ${CMAKE_BINARY_DIR}/Flags/Flags.h
  22. "//Flags.h
  23. ")
  24. file(WRITE ${CMAKE_BINARY_DIR}/IncDir/IncDir.h
  25. "//IncDir.h
  26. ")
  27. file(WRITE ${CMAKE_BINARY_DIR}/SrcProp/SrcProp.h
  28. "//SrcProp.h
  29. ")
  30. file(WRITE ${CMAKE_BINARY_DIR}/TarProp/TarProp.h
  31. "//TarProp.h
  32. ")
  33. # default to testing with full path
  34. # some compilers can not handle the escape for directories
  35. # with spaces in them.
  36. set(USE_FULLPATH TRUE)
  37. if(WATCOM OR MSVC60)
  38. set(USE_FULLPATH FALSE)
  39. endif()
  40. if(USE_FULLPATH)
  41. string(APPEND CMAKE_CXX_FLAGS " \"-I${CMAKE_BINARY_DIR}/Flags\"")
  42. else()
  43. string(APPEND CMAKE_CXX_FLAGS " -IFlags")
  44. endif()
  45. include_directories(${CMAKE_BINARY_DIR}/IncDir)
  46. if(USE_FULLPATH)
  47. set_source_files_properties(main.cpp PROPERTIES COMPILE_FLAGS
  48. "\"-I${CMAKE_BINARY_DIR}/SrcProp\"")
  49. else()
  50. set_source_files_properties(main.cpp PROPERTIES COMPILE_FLAGS
  51. "-ISrcProp")
  52. endif()
  53. add_executable(IncludeDirectories main.cpp)
  54. if(USE_FULLPATH)
  55. set_target_properties(IncludeDirectories
  56. PROPERTIES COMPILE_FLAGS "\"-I${CMAKE_BINARY_DIR}/TarProp\"")
  57. else()
  58. set_target_properties(IncludeDirectories
  59. PROPERTIES COMPILE_FLAGS "-ITarProp")
  60. endif()
  61. add_subdirectory(StandardIncludeDirectories)
  62. add_subdirectory(TargetIncludeDirectories)
  63. set_property(DIRECTORY PROPERTY INCLUDE_DIRECTORIES "${CMAKE_BINARY_DIR}")
  64. get_property(propContent DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
  65. if (NOT propContent STREQUAL "${CMAKE_BINARY_DIR}")
  66. message(SEND_ERROR "Setting DIRECTORY property failed.")
  67. endif()
  68. set_property(DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
  69. get_property(propContentAfter DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
  70. if (NOT propContentAfter STREQUAL "")
  71. message(SEND_ERROR "Clearing DIRECTORY property failed.")
  72. endif()
  73. add_library(empty_entry_test SHARED empty.cpp)
  74. set_target_properties(empty_entry_test PROPERTIES INCLUDE_DIRECTORIES "")
  75. include_directories(/one/two
  76. " "
  77. " "
  78. )
  79. get_target_property(incs empty_entry_test INCLUDE_DIRECTORIES)
  80. if (NOT incs STREQUAL ";/one/two")
  81. message(SEND_ERROR "Empty include_directories entry was not ignored.")
  82. endif()
  83. if(NOT CMAKE_GENERATOR STREQUAL Xcode AND NOT CMAKE_GENERATOR STREQUAL Ninja)
  84. add_subdirectory(CMP0021)
  85. endif()