CMakeLists.txt 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #
  2. # EnTT
  3. #
  4. #
  5. # Building in-tree is not allowed (we take care of your craziness).
  6. #
  7. if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
  8. message(FATAL_ERROR "Prevented in-tree built. Please create a build directory outside of the source code and call cmake from there. Thank you.")
  9. endif()
  10. #
  11. # Project configuration
  12. #
  13. project(entt)
  14. cmake_minimum_required(VERSION 3.4)
  15. if(NOT CMAKE_BUILD_TYPE)
  16. set(CMAKE_BUILD_TYPE Debug)
  17. endif(NOT CMAKE_BUILD_TYPE)
  18. set(PROJECT_NAME "entt")
  19. set(PROJECT_VERSION_MAJOR 1)
  20. set(PROJECT_VERSION_MINOR 0)
  21. set(PROJECT_VERSION_PATCH 0)
  22. set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
  23. set(SETTINGS_ORGANIZATION "Michele Caini")
  24. set(SETTINGS_APPLICATION ${PROJECT_NAME})
  25. set(PROJECT_AUTHOR "Michele Caini")
  26. set(PROJECT_YEAR_COPYRIGHT "2017")
  27. set(PROJECT_AUTHOR_EMAIL "michele.caini@gmail.com")
  28. set(PROJECT_BUILD_MESSAGE ${PROJECT_NAME} " v" ${PROJECT_VERSION} " (" ${CMAKE_BUILD_TYPE} ")")
  29. set(COPYRIGHT_BUILD_MESSAGE "Copyright (c) " ${PROJECT_YEAR_COPYRIGHT} " " ${PROJECT_AUTHOR} " <" ${PROJECT_AUTHOR_EMAIL} ">")
  30. message("*")
  31. message("* " ${PROJECT_BUILD_MESSAGE})
  32. message("* " ${COPYRIGHT_BUILD_MESSAGE})
  33. message("*")
  34. #
  35. # Compile stuff
  36. #
  37. set(CMAKE_CXX_STANDARD 14)
  38. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  39. set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined")
  40. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall")
  41. # set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-Wextra -Weffc++")
  42. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g -DDEBUG")
  43. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DRELEASE")
  44. add_definitions(
  45. -DPROJECT_NAME=${PROJECT_NAME}
  46. -DPROJECT_VERSION=${PROJECT_VERSION}
  47. )
  48. #
  49. # CMake configuration
  50. #
  51. set(PROJECT_CMAKE_MODULES cmake/modules)
  52. set(PROJECT_BUILD_DIR build)
  53. set(PROJECT_DEPS_DIR deps)
  54. set(PROJECT_SRC_DIR src)
  55. set(PROJECT_TEST_DIR test)
  56. set(PROJECT_RUNTIME_OUTPUT_DIRECTORY bin)
  57. set(
  58. CMAKE_MODULE_PATH
  59. ${CMAKE_MODULE_PATH}
  60. ${CMAKE_SOURCE_DIR}/${PROJECT_CMAKE_MODULES}
  61. )
  62. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_RUNTIME_OUTPUT_DIRECTORY})
  63. #
  64. # Enable test support using ctest
  65. #
  66. include(CTest)
  67. #
  68. # Referenced packages
  69. #
  70. set(THREADS_PREFER_PTHREAD_FLAG ON)
  71. find_package(Threads REQUIRED)
  72. find_package(GoogleTest)
  73. #
  74. # Referenced directories and targets
  75. #
  76. if(${GOOGLETEST_FOUND})
  77. add_subdirectory(${PROJECT_TEST_DIR})
  78. endif(${GOOGLETEST_FOUND})
  79. #
  80. # I use QtCreator and I need the lines below, so do not ask. :-)
  81. #
  82. file(
  83. GLOB_RECURSE PROJECT_FILES FOLLOW_SYMLINKS
  84. *.txt *.c *.cpp *.hpp *.h *.in *.cmake *.sh *.md AUTHORS LICENSE
  85. )
  86. add_custom_target(
  87. QTCREATOR_FALLBACK ALL
  88. COMMENT "Feel free to ignore this target, but please do not remove it."
  89. SOURCES ${PROJECT_FILES}
  90. )