diff --git a/CMakeLists.txt b/CMakeLists.txt index 99376704..3d6ea093 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,10 +86,10 @@ include(CMakePackageConfigHelpers) write_basic_package_version_file( ${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE} COMPATIBILITY SameMajorVersion ) -configure_package_config_file( +configure_file( ${NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE} ${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE} - INSTALL_DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR} + @ONLY ) install( @@ -121,4 +121,3 @@ install( NAMESPACE ${PROJECT_NAME}:: DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR} ) -export(PACKAGE ${PROJECT_NAME}) \ No newline at end of file diff --git a/README.md b/README.md index c41cb8ea..013db618 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,18 @@ to the files you want to process JSON and set the necessary switches to enable C You can further use file [`include/nlohmann/json_fwd.hpp`](https://github.com/nlohmann/json/blob/develop/include/nlohmann/json_fwd.hpp) for forward-declarations. The installation of json_fwd.hpp (as part of cmake's install step), can be achieved by setting `-DJSON_MultipleHeaders=ON`. +If this library was built with CMake then you can consume it from another CMake project by using the namespaced imported target from the generated package configuration: +```cmake +# CMakeLists.txt +find_package(nlohmann_json REQUIRED) +... +add_library(foo ...) +... +target_link_libraries(foo PRIVATE nlohmann_json::nlohmann_json) +``` +The package configuration file, `nlohmann_jsonConfig.cmake`, can be used either from an install tree or directly out of the build tree. + + ### Package Managers :beer: If you are using OS X and [Homebrew](http://brew.sh), just type `brew tap nlohmann/json` and `brew install nlohmann_json` and you're set. If you want the bleeding edge rather than the latest release, use `brew install nlohmann_json --HEAD`. diff --git a/cmake/config.cmake.in b/cmake/config.cmake.in index 8d52ae14..9a17a7d7 100644 --- a/cmake/config.cmake.in +++ b/cmake/config.cmake.in @@ -1,9 +1,15 @@ -@PACKAGE_INIT@ +include(FindPackageHandleStandardArgs) +set(${CMAKE_FIND_PACKAGE_NAME}_CONFIG ${CMAKE_CURRENT_LIST_FILE}) +find_package_handle_standard_args(@PROJECT_NAME@ CONFIG_MODE) + if(NOT TARGET @PROJECT_NAME@::@NLOHMANN_JSON_TARGET_NAME@) include("${CMAKE_CURRENT_LIST_DIR}/@NLOHMANN_JSON_TARGETS_EXPORT_NAME@.cmake") if((NOT TARGET @NLOHMANN_JSON_TARGET_NAME@) AND - (PACKAGE_FIND_VERSION VERSION_LESS 3.2.0)) - add_library(@NLOHMANN_JSON_TARGET_NAME@ ALIAS @PROJECT_NAME@::@NLOHMANN_JSON_TARGET_NAME@) + (NOT @PROJECT_NAME@_FIND_VERSION OR + @PROJECT_NAME@_FIND_VERSION VERSION_LESS 3.2.0)) + add_library(@NLOHMANN_JSON_TARGET_NAME@ INTERFACE IMPORTED) + set_target_properties(@NLOHMANN_JSON_TARGET_NAME@ PROPERTIES + INTERFACE_LINK_LIBRARIES @PROJECT_NAME@::@NLOHMANN_JSON_TARGET_NAME@ + ) endif() endif() -check_required_components("@PROJECT_NAME@") diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index c0f40728..14493bd4 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -133,3 +133,10 @@ foreach(file ${files}) endif() endforeach() + +############################################################################# +# Test the generated build configs +############################################################################# +add_subdirectory(cmake_import) +add_subdirectory(cmake_import_minver) +add_subdirectory(cmake_add_subdirectory) diff --git a/test/cmake_add_subdirectory/CMakeLists.txt b/test/cmake_add_subdirectory/CMakeLists.txt new file mode 100644 index 00000000..ad04547e --- /dev/null +++ b/test/cmake_add_subdirectory/CMakeLists.txt @@ -0,0 +1,15 @@ +add_test(NAME cmake_add_subdirectory_configure + COMMAND ${CMAKE_COMMAND} + -G "${CMAKE_GENERATOR}" + -Dnlohmann_json_source=${PROJECT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/project +) +add_test(NAME cmake_add_subdirectory_build + COMMAND ${CMAKE_COMMAND} --build . +) +set_tests_properties(cmake_add_subdirectory_configure PROPERTIES + FIXTURES_SETUP cmake_add_subdirectory +) +set_tests_properties(cmake_add_subdirectory_build PROPERTIES + FIXTURES_REQUIRED cmake_add_subdirectory +) diff --git a/test/cmake_add_subdirectory/project/CMakeLists.txt b/test/cmake_add_subdirectory/project/CMakeLists.txt new file mode 100644 index 00000000..2c5be183 --- /dev/null +++ b/test/cmake_add_subdirectory/project/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.8) + +project(DummyImport CXX) + +set(JSON_BuildTests OFF CACHE INTERNAL "") +add_subdirectory(${nlohmann_json_source} + ${CMAKE_CURRENT_BINARY_DIR}/nlohmann_json) + +add_executable(with_namespace_target main.cpp) +target_link_libraries(with_namespace_target nlohmann_json::nlohmann_json) + +add_executable(without_namespace_target main.cpp) +target_link_libraries(without_namespace_target nlohmann_json) diff --git a/test/cmake_add_subdirectory/project/main.cpp b/test/cmake_add_subdirectory/project/main.cpp new file mode 100644 index 00000000..d2d118b8 --- /dev/null +++ b/test/cmake_add_subdirectory/project/main.cpp @@ -0,0 +1,8 @@ +#include + +int main(int argc, char **argv) +{ + nlohmann::json j; + + return 0; +} diff --git a/test/cmake_import/CMakeLists.txt b/test/cmake_import/CMakeLists.txt new file mode 100644 index 00000000..911c342c --- /dev/null +++ b/test/cmake_import/CMakeLists.txt @@ -0,0 +1,15 @@ +add_test(NAME cmake_import_configure + COMMAND ${CMAKE_COMMAND} + -G "${CMAKE_GENERATOR}" + -Dnlohmann_json_DIR=${PROJECT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/project +) +add_test(NAME cmake_import_build + COMMAND ${CMAKE_COMMAND} --build . +) +set_tests_properties(cmake_import_configure PROPERTIES + FIXTURES_SETUP cmake_import +) +set_tests_properties(cmake_import_build PROPERTIES + FIXTURES_REQUIRED cmake_import +) diff --git a/test/cmake_import/project/CMakeLists.txt b/test/cmake_import/project/CMakeLists.txt new file mode 100644 index 00000000..d268d72c --- /dev/null +++ b/test/cmake_import/project/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.8) + +project(DummyImport CXX) + +find_package(nlohmann_json REQUIRED) + +add_executable(with_namespace_target main.cpp) +target_link_libraries(with_namespace_target nlohmann_json::nlohmann_json) + +add_executable(without_namespace_target main.cpp) +target_link_libraries(without_namespace_target nlohmann_json) + diff --git a/test/cmake_import/project/main.cpp b/test/cmake_import/project/main.cpp new file mode 100644 index 00000000..d2d118b8 --- /dev/null +++ b/test/cmake_import/project/main.cpp @@ -0,0 +1,8 @@ +#include + +int main(int argc, char **argv) +{ + nlohmann::json j; + + return 0; +} diff --git a/test/cmake_import_minver/CMakeLists.txt b/test/cmake_import_minver/CMakeLists.txt new file mode 100644 index 00000000..8cef2fab --- /dev/null +++ b/test/cmake_import_minver/CMakeLists.txt @@ -0,0 +1,15 @@ +add_test(NAME cmake_import_minver_configure + COMMAND ${CMAKE_COMMAND} + -G "${CMAKE_GENERATOR}" + -Dnlohmann_json_DIR=${PROJECT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/project +) +add_test(NAME cmake_import_minver_build + COMMAND ${CMAKE_COMMAND} --build . +) +set_tests_properties(cmake_import_minver_configure PROPERTIES + FIXTURES_SETUP cmake_import_minver +) +set_tests_properties(cmake_import_minver_build PROPERTIES + FIXTURES_REQUIRED cmake_import_minver +) diff --git a/test/cmake_import_minver/project/CMakeLists.txt b/test/cmake_import_minver/project/CMakeLists.txt new file mode 100644 index 00000000..eeef3296 --- /dev/null +++ b/test/cmake_import_minver/project/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.8) + +project(DummyImportMinVer CXX) + +find_package(nlohmann_json 3.2.0 REQUIRED) + +add_executable(with_namespace_target main.cpp) +target_link_libraries(with_namespace_target nlohmann_json::nlohmann_json) diff --git a/test/cmake_import_minver/project/main.cpp b/test/cmake_import_minver/project/main.cpp new file mode 100644 index 00000000..d2d118b8 --- /dev/null +++ b/test/cmake_import_minver/project/main.cpp @@ -0,0 +1,8 @@ +#include + +int main(int argc, char **argv) +{ + nlohmann::json j; + + return 0; +}