|
1 | | -cmake_minimum_required(VERSION 3.0) |
| 1 | +cmake_minimum_required(VERSION 3.0.0) |
2 | 2 |
|
3 | | -# define the project |
4 | | -project(nlohmann_json VERSION 2.1.1 LANGUAGES CXX) |
| 3 | +## |
| 4 | +## PROJECT |
| 5 | +## name and version |
| 6 | +## |
| 7 | +project(nlohmann_json VERSION 2.1.1) |
5 | 8 |
|
| 9 | +## |
| 10 | +## OPTIONS |
| 11 | +## |
6 | 12 | option(JSON_BuildTests "Build the unit tests" ON) |
7 | 13 |
|
8 | | -# define project variables |
9 | | -set(JSON_TARGET_NAME ${PROJECT_NAME}) |
10 | | -set(JSON_PACKAGE_NAME ${JSON_TARGET_NAME}) |
11 | | -set(JSON_TARGETS_FILENAME "${JSON_PACKAGE_NAME}Targets.cmake") |
12 | | -set(JSON_CONFIG_FILENAME "${JSON_PACKAGE_NAME}Config.cmake") |
13 | | -set(JSON_CONFIGVERSION_FILENAME "${JSON_PACKAGE_NAME}ConfigVersion.cmake") |
14 | | -set(JSON_CONFIG_DESTINATION "cmake") |
15 | | -set(JSON_INCLUDE_DESTINATION "include/nlohmann") |
| 14 | +## |
| 15 | +## CONFIGURATION |
| 16 | +## |
| 17 | +set(NLOHMANN_JSON_TARGET_NAME ${PROJECT_NAME}) |
| 18 | +set(NLOHMANN_JSON_SOURCE_DIR "src/") |
| 19 | +set(NLOHMANN_JSON_CONFIG_INSTALL_DIR "lib/cmake/${PROJECT_NAME}") |
| 20 | +set(NLOHMANN_JSON_INCLUDE_INSTALL_DIR "include") |
| 21 | +set(NLOHMANN_JSON_HEADER_INSTALL_DIR "${NLOHMANN_JSON_INCLUDE_INSTALL_DIR}/nlohmann") |
| 22 | +set(NLOHMANN_JSON_TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") |
| 23 | +set(NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE "cmake/config.cmake.in") |
| 24 | +set(NLOHMANN_JSON_CMAKE_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}/cmake_config") |
| 25 | +set(NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}ConfigVersion.cmake") |
| 26 | +set(NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}Config.cmake") |
16 | 27 |
|
17 | | -set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") |
| 28 | +## |
| 29 | +## TARGET |
| 30 | +## create target and add include path |
| 31 | +## |
| 32 | +add_library(${NLOHMANN_JSON_TARGET_NAME} INTERFACE) |
18 | 33 |
|
19 | | -# create and configure the library target |
20 | | -add_library(${JSON_TARGET_NAME} INTERFACE) |
21 | | -target_include_directories(${JSON_TARGET_NAME} INTERFACE |
22 | | - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> |
23 | | - $<INSTALL_INTERFACE:${JSON_INCLUDE_DESTINATION}>) |
24 | | - |
25 | | -# create and configure the unit test target |
| 34 | +target_include_directories( |
| 35 | + ${NLOHMANN_JSON_TARGET_NAME} |
| 36 | + INTERFACE $<INSTALL_INTERFACE:include/> |
| 37 | +) |
| 38 | + |
| 39 | +## |
| 40 | +## TESTS |
| 41 | +## create and configure the unit test target |
| 42 | +## |
26 | 43 | if(JSON_BuildTests) |
27 | 44 | enable_testing() |
| 45 | + include_directories(${NLOHMANN_JSON_SOURCE_DIR}) |
28 | 46 | add_subdirectory(test) |
29 | 47 | endif() |
30 | 48 |
|
31 | | -# generate a config and config version file for the package |
| 49 | +## |
| 50 | +## INSTALL |
| 51 | +## install header files, generate and install cmake config files for find_package() |
| 52 | +## |
32 | 53 | include(CMakePackageConfigHelpers) |
33 | | -configure_package_config_file("cmake/config.cmake.in" |
34 | | - "${CMAKE_CURRENT_BINARY_DIR}/${JSON_CONFIG_FILENAME}" |
35 | | - INSTALL_DESTINATION ${JSON_CONFIG_DESTINATION} |
36 | | - PATH_VARS JSON_INCLUDE_DESTINATION) |
37 | | -write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/${JSON_CONFIGVERSION_FILENAME}" |
38 | | - VERSION ${PROJECT_VERSION} |
39 | | - COMPATIBILITY SameMajorVersion) |
40 | | - |
41 | | -# export the library target and store build directory in package registry |
42 | | -export(TARGETS ${JSON_TARGET_NAME} |
43 | | - FILE "${CMAKE_CURRENT_BINARY_DIR}/${JSON_TARGETS_FILENAME}") |
44 | | -export(PACKAGE ${JSON_PACKAGE_NAME}) |
45 | | - |
46 | | -# install library target and config files |
47 | | -install(TARGETS ${JSON_TARGET_NAME} |
48 | | - EXPORT ${JSON_PACKAGE_NAME}) |
49 | | -install(FILES "src/json.hpp" |
50 | | - DESTINATION ${JSON_INCLUDE_DESTINATION}) |
51 | | -install(EXPORT ${JSON_PACKAGE_NAME} |
52 | | - FILE ${JSON_TARGETS_FILENAME} |
53 | | - DESTINATION ${JSON_CONFIG_DESTINATION}) |
54 | | -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${JSON_CONFIG_FILENAME}" |
55 | | - "${CMAKE_CURRENT_BINARY_DIR}/${JSON_CONFIGVERSION_FILENAME}" |
56 | | - DESTINATION ${JSON_CONFIG_DESTINATION}) |
| 54 | +write_basic_package_version_file( |
| 55 | + ${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE} COMPATIBILITY SameMajorVersion |
| 56 | +) |
| 57 | +configure_package_config_file( |
| 58 | + ${NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE} |
| 59 | + ${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE} |
| 60 | + INSTALL_DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR} |
| 61 | +) |
| 62 | +install( |
| 63 | + DIRECTORY ${NLOHMANN_JSON_SOURCE_DIR} |
| 64 | + DESTINATION ${NLOHMANN_JSON_HEADER_INSTALL_DIR} |
| 65 | +) |
| 66 | +install( |
| 67 | + FILES ${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE} ${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE} |
| 68 | + DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR} |
| 69 | +) |
| 70 | +install( |
| 71 | + TARGETS ${NLOHMANN_JSON_TARGET_NAME} |
| 72 | + EXPORT ${NLOHMANN_JSON_TARGETS_EXPORT_NAME} |
| 73 | + INCLUDES DESTINATION ${NLOHMANN_JSON_INCLUDE_INSTALL_DIR} |
| 74 | +) |
| 75 | +install( |
| 76 | + EXPORT ${NLOHMANN_JSON_TARGETS_EXPORT_NAME} |
| 77 | + DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR} |
| 78 | +) |
0 commit comments