Merge pull request #1260 from chuckatkins/fix-cmake-target-alias
Fix broken cmake imported target alias
This commit is contained in:
commit
c8231eff75
13 changed files with 133 additions and 7 deletions
|
@ -86,10 +86,10 @@ include(CMakePackageConfigHelpers)
|
||||||
write_basic_package_version_file(
|
write_basic_package_version_file(
|
||||||
${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE} COMPATIBILITY SameMajorVersion
|
${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE} COMPATIBILITY SameMajorVersion
|
||||||
)
|
)
|
||||||
configure_package_config_file(
|
configure_file(
|
||||||
${NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE}
|
${NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE}
|
||||||
${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE}
|
${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE}
|
||||||
INSTALL_DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR}
|
@ONLY
|
||||||
)
|
)
|
||||||
|
|
||||||
install(
|
install(
|
||||||
|
@ -121,4 +121,3 @@ install(
|
||||||
NAMESPACE ${PROJECT_NAME}::
|
NAMESPACE ${PROJECT_NAME}::
|
||||||
DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR}
|
DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR}
|
||||||
)
|
)
|
||||||
export(PACKAGE ${PROJECT_NAME})
|
|
12
README.md
12
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`.
|
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
|
### 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`.
|
: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`.
|
||||||
|
|
|
@ -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@)
|
if(NOT TARGET @PROJECT_NAME@::@NLOHMANN_JSON_TARGET_NAME@)
|
||||||
include("${CMAKE_CURRENT_LIST_DIR}/@NLOHMANN_JSON_TARGETS_EXPORT_NAME@.cmake")
|
include("${CMAKE_CURRENT_LIST_DIR}/@NLOHMANN_JSON_TARGETS_EXPORT_NAME@.cmake")
|
||||||
if((NOT TARGET @NLOHMANN_JSON_TARGET_NAME@) AND
|
if((NOT TARGET @NLOHMANN_JSON_TARGET_NAME@) AND
|
||||||
(PACKAGE_FIND_VERSION VERSION_LESS 3.2.0))
|
(NOT @PROJECT_NAME@_FIND_VERSION OR
|
||||||
add_library(@NLOHMANN_JSON_TARGET_NAME@ ALIAS @PROJECT_NAME@::@NLOHMANN_JSON_TARGET_NAME@)
|
@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()
|
||||||
endif()
|
endif()
|
||||||
check_required_components("@PROJECT_NAME@")
|
|
||||||
|
|
|
@ -133,3 +133,10 @@ foreach(file ${files})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
# Test the generated build configs
|
||||||
|
#############################################################################
|
||||||
|
add_subdirectory(cmake_import)
|
||||||
|
add_subdirectory(cmake_import_minver)
|
||||||
|
add_subdirectory(cmake_add_subdirectory)
|
||||||
|
|
15
test/cmake_add_subdirectory/CMakeLists.txt
Normal file
15
test/cmake_add_subdirectory/CMakeLists.txt
Normal file
|
@ -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
|
||||||
|
)
|
13
test/cmake_add_subdirectory/project/CMakeLists.txt
Normal file
13
test/cmake_add_subdirectory/project/CMakeLists.txt
Normal file
|
@ -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)
|
8
test/cmake_add_subdirectory/project/main.cpp
Normal file
8
test/cmake_add_subdirectory/project/main.cpp
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
nlohmann::json j;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
15
test/cmake_import/CMakeLists.txt
Normal file
15
test/cmake_import/CMakeLists.txt
Normal file
|
@ -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
|
||||||
|
)
|
12
test/cmake_import/project/CMakeLists.txt
Normal file
12
test/cmake_import/project/CMakeLists.txt
Normal file
|
@ -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)
|
||||||
|
|
8
test/cmake_import/project/main.cpp
Normal file
8
test/cmake_import/project/main.cpp
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
nlohmann::json j;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
15
test/cmake_import_minver/CMakeLists.txt
Normal file
15
test/cmake_import_minver/CMakeLists.txt
Normal file
|
@ -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
|
||||||
|
)
|
8
test/cmake_import_minver/project/CMakeLists.txt
Normal file
8
test/cmake_import_minver/project/CMakeLists.txt
Normal file
|
@ -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)
|
8
test/cmake_import_minver/project/main.cpp
Normal file
8
test/cmake_import_minver/project/main.cpp
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
nlohmann::json j;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in a new issue