1cmake_minimum_required(VERSION 3.1) 2 3## 4## PROJECT 5## name and version 6## 7project(nlohmann_json VERSION 3.7.3 LANGUAGES CXX) 8 9## 10## INCLUDE 11## 12## 13include(ExternalProject) 14 15## 16## OPTIONS 17## 18option(JSON_BuildTests "Build the unit tests when BUILD_TESTING is enabled." ON) 19option(JSON_Install "Install CMake targets during install step." ON) 20option(JSON_MultipleHeaders "Use non-amalgamated version of the library." OFF) 21 22## 23## CONFIGURATION 24## 25include(GNUInstallDirs) 26 27set(NLOHMANN_JSON_TARGET_NAME ${PROJECT_NAME}) 28set(NLOHMANN_JSON_CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" CACHE INTERNAL "") 29set(NLOHMANN_JSON_INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}") 30set(NLOHMANN_JSON_TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") 31set(NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE "cmake/config.cmake.in") 32set(NLOHMANN_JSON_CMAKE_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}") 33set(NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}ConfigVersion.cmake") 34set(NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}Config.cmake") 35set(NLOHMANN_JSON_CMAKE_PROJECT_TARGETS_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}Targets.cmake") 36 37if (JSON_MultipleHeaders) 38 set(NLOHMANN_JSON_INCLUDE_BUILD_DIR "${PROJECT_SOURCE_DIR}/include/") 39 message(STATUS "Using the multi-header code from ${NLOHMANN_JSON_INCLUDE_BUILD_DIR}") 40else() 41 set(NLOHMANN_JSON_INCLUDE_BUILD_DIR "${PROJECT_SOURCE_DIR}/single_include/") 42 message(STATUS "Using the single-header code from ${NLOHMANN_JSON_INCLUDE_BUILD_DIR}") 43endif() 44 45## 46## TARGET 47## create target and add include path 48## 49add_library(${NLOHMANN_JSON_TARGET_NAME} INTERFACE) 50add_library(${PROJECT_NAME}::${NLOHMANN_JSON_TARGET_NAME} ALIAS ${NLOHMANN_JSON_TARGET_NAME}) 51if (${CMAKE_VERSION} VERSION_LESS "3.8.0") 52 target_compile_features(${NLOHMANN_JSON_TARGET_NAME} INTERFACE cxx_range_for) 53else() 54 target_compile_features(${NLOHMANN_JSON_TARGET_NAME} INTERFACE cxx_std_11) 55endif() 56 57target_include_directories( 58 ${NLOHMANN_JSON_TARGET_NAME} 59 INTERFACE 60 $<BUILD_INTERFACE:${NLOHMANN_JSON_INCLUDE_BUILD_DIR}> 61 $<INSTALL_INTERFACE:include> 62) 63 64## add debug view definition file for msvc (natvis) 65if (MSVC) 66 set(NLOHMANN_ADD_NATVIS TRUE) 67 set(NLOHMANN_NATVIS_FILE "nlohmann_json.natvis") 68 target_sources( 69 ${NLOHMANN_JSON_TARGET_NAME} 70 INTERFACE 71 $<INSTALL_INTERFACE:${NLOHMANN_NATVIS_FILE}> 72 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${NLOHMANN_NATVIS_FILE}> 73 ) 74endif() 75 76## 77## TESTS 78## create and configure the unit test target 79## 80include(CTest) #adds option BUILD_TESTING (default ON) 81 82if(BUILD_TESTING AND JSON_BuildTests) 83 enable_testing() 84 add_subdirectory(test) 85endif() 86 87## 88## INSTALL 89## install header files, generate and install cmake config files for find_package() 90## 91include(CMakePackageConfigHelpers) 92write_basic_package_version_file( 93 ${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE} COMPATIBILITY SameMajorVersion 94) 95configure_file( 96 ${NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE} 97 ${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE} 98 @ONLY 99) 100 101if(JSON_Install) 102 install( 103 DIRECTORY ${NLOHMANN_JSON_INCLUDE_BUILD_DIR} 104 DESTINATION ${NLOHMANN_JSON_INCLUDE_INSTALL_DIR} 105 ) 106 install( 107 FILES ${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE} ${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE} 108 DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR} 109 ) 110 if (NLOHMANN_ADD_NATVIS) 111 install( 112 FILES ${NLOHMANN_NATVIS_FILE} 113 DESTINATION . 114 ) 115 endif() 116 export( 117 TARGETS ${NLOHMANN_JSON_TARGET_NAME} 118 NAMESPACE ${PROJECT_NAME}:: 119 FILE ${NLOHMANN_JSON_CMAKE_PROJECT_TARGETS_FILE} 120 ) 121 install( 122 TARGETS ${NLOHMANN_JSON_TARGET_NAME} 123 EXPORT ${NLOHMANN_JSON_TARGETS_EXPORT_NAME} 124 INCLUDES DESTINATION ${NLOHMANN_JSON_INCLUDE_INSTALL_DIR} 125 ) 126 install( 127 EXPORT ${NLOHMANN_JSON_TARGETS_EXPORT_NAME} 128 NAMESPACE ${PROJECT_NAME}:: 129 DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR} 130 ) 131endif() 132