CMakeLists.txt 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
  2. SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules)
  3. PROJECT(RapidJSON CXX)
  4. set(LIB_MAJOR_VERSION "1")
  5. set(LIB_MINOR_VERSION "0")
  6. set(LIB_PATCH_VERSION "2")
  7. set(LIB_VERSION_STRING "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_PATCH_VERSION}")
  8. # compile in release with debug info mode by default
  9. if(NOT CMAKE_BUILD_TYPE)
  10. set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
  11. endif()
  12. # Build all binaries in a separate directory
  13. SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
  14. option(RAPIDJSON_BUILD_DOC "Build rapidjson documentation." ON)
  15. option(RAPIDJSON_BUILD_EXAMPLES "Build rapidjson examples." ON)
  16. option(RAPIDJSON_BUILD_TESTS "Build rapidjson perftests and unittests." ON)
  17. option(RAPIDJSON_BUILD_THIRDPARTY_GTEST
  18. "Use gtest installation in `thirdparty/gtest` by default if available" OFF)
  19. option(RAPIDJSON_BUILD_CXX11 "Build rapidjson with C++11 (gcc/clang)" ON)
  20. option(RAPIDJSON_HAS_STDSTRING "" OFF)
  21. if(RAPIDJSON_HAS_STDSTRING)
  22. add_definitions(-DRAPIDJSON_HAS_STDSTRING)
  23. endif()
  24. if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
  25. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -Wall -Wextra -Werror")
  26. if (RAPIDJSON_BUILD_CXX11)
  27. if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7.0")
  28. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
  29. else()
  30. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  31. endif()
  32. endif()
  33. elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  34. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -Wall -Wextra -Werror -Wno-missing-field-initializers")
  35. if (RAPIDJSON_BUILD_CXX11)
  36. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  37. endif()
  38. elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
  39. add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
  40. endif()
  41. #add extra search paths for libraries and includes
  42. SET(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "The directory the headers are installed in")
  43. SET(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE STRING "Directory where lib will install")
  44. SET(DOC_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME}" CACHE PATH "Path to the documentation")
  45. IF(UNIX OR CYGWIN)
  46. SET(_CMAKE_INSTALL_DIR "${LIB_INSTALL_DIR}/cmake/${PROJECT_NAME}")
  47. ELSEIF(WIN32)
  48. SET(_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/cmake")
  49. ENDIF()
  50. SET(CMAKE_INSTALL_DIR "${_CMAKE_INSTALL_DIR}" CACHE PATH "The directory cmake fiels are installed in")
  51. include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
  52. if(RAPIDJSON_BUILD_DOC)
  53. add_subdirectory(doc)
  54. endif()
  55. add_custom_target(travis_doc)
  56. add_custom_command(TARGET travis_doc
  57. COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/travis-doxygen.sh)
  58. if(RAPIDJSON_BUILD_EXAMPLES)
  59. add_subdirectory(example)
  60. endif()
  61. if(RAPIDJSON_BUILD_TESTS)
  62. if(MSVC11)
  63. # required for VS2012 due to missing support for variadic templates
  64. add_definitions(-D_VARIADIC_MAX=10)
  65. endif(MSVC11)
  66. add_subdirectory(test)
  67. include(CTest)
  68. endif()
  69. # pkg-config
  70. IF (UNIX OR CYGWIN)
  71. CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc.in
  72. ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
  73. @ONLY)
  74. INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
  75. DESTINATION "${LIB_INSTALL_DIR}/pkgconfig"
  76. COMPONENT pkgconfig)
  77. ENDIF()
  78. install(FILES readme.md
  79. DESTINATION "${DOC_INSTALL_DIR}"
  80. COMPONENT doc)
  81. install(DIRECTORY include/rapidjson
  82. DESTINATION "${INCLUDE_INSTALL_DIR}"
  83. COMPONENT dev)
  84. install(DIRECTORY example/
  85. DESTINATION "${DOC_INSTALL_DIR}/examples"
  86. COMPONENT examples
  87. # Following patterns are for excluding the intermediate/object files
  88. # from an install of in-source CMake build.
  89. PATTERN "CMakeFiles" EXCLUDE
  90. PATTERN "Makefile" EXCLUDE
  91. PATTERN "cmake_install.cmake" EXCLUDE)
  92. # Provide config and version files to be used by other applications
  93. # ===============================
  94. export(PACKAGE ${PROJECT_NAME})
  95. # cmake-modules
  96. CONFIGURE_FILE(${PROJECT_NAME}Config.cmake.in
  97. ${PROJECT_NAME}Config.cmake
  98. @ONLY)
  99. CONFIGURE_FILE(${PROJECT_NAME}ConfigVersion.cmake.in
  100. ${PROJECT_NAME}ConfigVersion.cmake
  101. @ONLY)
  102. INSTALL(FILES
  103. ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
  104. ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
  105. DESTINATION "${CMAKE_INSTALL_DIR}"
  106. COMPONENT dev)