Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ArthurSonzogni/nlohmann_json_cmake_fetchcontent.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolasIRAGNE <nicoragne@hotmail.fr>2022-01-07 01:10:44 +0300
committerGitHub <noreply@github.com>2022-01-07 01:10:44 +0300
commitf253e9664d6a0628fa779c858a05a5aaf05e9cb4 (patch)
tree22d60b52f6aec50fd4aa9c77bb18731e6f67a1ed /CMakeLists.txt
parentb48095ee99aff048dc4760dd644b848bc1e6f0c3 (diff)
Make the imported target installable (#7)
Import from the original nlohmann repository the parts about installing the library. Co-authored-by: Nicolas IRAGNE <nicolas.iragne@alyce.fr> Co-authored-by: ArthurSonzogni <sonzogniarthur@gmail.com>
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt65
1 files changed, 64 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5d6a605..a30b398 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,7 +4,9 @@ project(nlohmann_json LANGUAGES CXX)
add_library(nlohmann_json INTERFACE)
add_library(nlohmann_json::nlohmann_json ALIAS nlohmann_json)
target_include_directories(nlohmann_json
- INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/include
+ INTERFACE
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:include/nlohmann>
)
if (${CMAKE_VERSION} VERSION_LESS "3.8.0")
@@ -12,3 +14,64 @@ if (${CMAKE_VERSION} VERSION_LESS "3.8.0")
else()
target_compile_features(nlohmann_json INTERFACE cxx_std_11)
endif()
+
+include(GNUInstallDirs)
+
+set(NLOHMANN_JSON_TARGET_NAME ${PROJECT_NAME})
+set(NLOHMANN_JSON_CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" CACHE INTERNAL "")
+set(NLOHMANN_JSON_INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}")
+set(NLOHMANN_JSON_TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets")
+set(NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE "cmake/config.cmake.in")
+set(NLOHMANN_JSON_CMAKE_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}")
+set(NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}ConfigVersion.cmake")
+set(NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}Config.cmake")
+set(NLOHMANN_JSON_CMAKE_PROJECT_TARGETS_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}Targets.cmake")
+
+##
+## INSTALL
+## install header files, generate and install cmake config files for find_package()
+##
+include(CMakePackageConfigHelpers)
+
+# use a custom package version config file instead of
+# write_basic_package_version_file to ensure that it's architecture-independent
+# https://github.com/nlohmann/json/issues/1697
+configure_file(
+ "cmake/nlohmann_jsonConfigVersion.cmake.in"
+ ${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE}
+ @ONLY
+)
+
+configure_file(
+ ${NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE}
+ ${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE}
+ @ONLY
+)
+
+install(
+ DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/nlohmann
+ DESTINATION ${NLOHMANN_JSON_INCLUDE_INSTALL_DIR}
+)
+
+install(
+ FILES ${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE} ${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE}
+ DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR}
+)
+
+export(
+ TARGETS ${NLOHMANN_JSON_TARGET_NAME}
+ NAMESPACE ${PROJECT_NAME}::
+ FILE ${NLOHMANN_JSON_CMAKE_PROJECT_TARGETS_FILE}
+)
+
+install(
+ TARGETS ${NLOHMANN_JSON_TARGET_NAME}
+ EXPORT ${NLOHMANN_JSON_TARGETS_EXPORT_NAME}
+ INCLUDES DESTINATION ${NLOHMANN_JSON_INCLUDE_INSTALL_DIR}
+)
+
+install(
+ EXPORT ${NLOHMANN_JSON_TARGETS_EXPORT_NAME}
+ NAMESPACE ${PROJECT_NAME}::
+ DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR}
+)