Jelajahi Sumber

CMake: Fix export of targets

The prior approach was exporting paths from the build environment.
Max Bruckner 8 tahun lalu
induk
melakukan
58b76b518a
2 mengubah file dengan 25 tambahan dan 18 penghapusan
  1. 7 10
      CMakeLists.txt
  2. 18 8
      cJSONConfig.cmake.in

+ 7 - 10
CMakeLists.txt

@@ -37,9 +37,11 @@ endif()
 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/libcjson.pc.in"
     "${CMAKE_CURRENT_BINARY_DIR}/libcjson.pc" @ONLY)
 
-install(TARGETS "${CJSON_LIB}" DESTINATION "${CMAKE_INSTALL_LIBDIR}")
 install(FILES cJSON.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/cjson")
 install (FILES "${CMAKE_CURRENT_BINARY_DIR}/libcjson.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+install(TARGETS "${CJSON_LIB}" DESTINATION "${CMAKE_INSTALL_LIBDIR}" EXPORT "${CJSON_LIB}")
+# export library information for CMake projects
+install(EXPORT "${CJSON_LIB}" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/cJSON")
 
 set_target_properties("${CJSON_LIB}"
     PROPERTIES
@@ -60,9 +62,11 @@ if(ENABLE_CJSON_UTILS)
     configure_file("${CMAKE_CURRENT_SOURCE_DIR}/libcjson_utils.pc.in"
         "${CMAKE_CURRENT_BINARY_DIR}/libcjson_utils.pc" @ONLY)
 
-    install(TARGETS "${CJSON_UTILS_LIB}" DESTINATION "${CMAKE_INSTALL_LIBDIR}")
+    install(TARGETS "${CJSON_UTILS_LIB}" DESTINATION "${CMAKE_INSTALL_LIBDIR}" EXPORT "${CJSON_UTILS_LIB}")
     install(FILES cJSON_Utils.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/cjson")
     install (FILES "${CMAKE_CURRENT_BINARY_DIR}/libcjson_utils.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+    # export library information for CMake projects
+    install(EXPORT "${CJSON_UTILS_LIB}" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/cJSON")
 
     set_target_properties("${CJSON_UTILS_LIB}"
         PROPERTIES
@@ -70,10 +74,6 @@ if(ENABLE_CJSON_UTILS)
             VERSION "${PROJECT_VERSION}")
 endif()
 
-# export library information for CMake projects
-export(TARGETS ${CJSON_LIB} ${CJSON_UTILS_LIB}
-  FILE ${PROJECT_BINARY_DIR}/cJSONConfigTargets.cmake)
-
 # create the other package config files
 configure_file(
   cJSONConfig.cmake.in
@@ -85,12 +85,9 @@ configure_file(
 # Install package config files
 install(FILES ${PROJECT_BINARY_DIR}/cJSONConfig.cmake
   ${PROJECT_BINARY_DIR}/cJSONConfigVersion.cmake
-  ${PROJECT_BINARY_DIR}/cJSONConfigTargets.cmake
-  DESTINATION lib/cmake/cJSON)
+  DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/cJSON")
 
 option(ENABLE_CJSON_TEST "Enable building cJSON test" OFF)
-
-
 if(ENABLE_CJSON_TEST)
     set(TEST_CJSON cJSON_test)
     add_executable("${TEST_CJSON}" test.c)

+ 18 - 8
cJSONConfig.cmake.in

@@ -1,14 +1,24 @@
 # Whether the utils lib was build.
 set(CJSON_UTILS_FOUND @ENABLE_CJSON_UTILS@)
 
-# All cJson libraries (including the utils lib if present
-set(CJSON_LIBRARIES @CJSON_UTILS_LIB@ @CJSON_LIB@)
-# The cJSON utils library
-set(CJSON_UTILS_LIBRARY @CJSON_UTILS_LIB@)
-# The cJSON library
-set(CJSON_LIBRARY @CJSON_LIB@)
 # The include directories used by cJSON
-set(CJSON_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@")
+set(CJSON_INCLUDE_DIRS "@prefix@/@includedir@")
 
 get_filename_component(_dir "${CMAKE_CURRENT_LIST_FILE}" PATH)
-include("${_dir}/cJSONConfigTargets.cmake")
+
+# The cJSON library
+set(CJSON_LIBRARY "@CJSON_LIB@")
+# Include the target
+include("${_dir}/cjson.cmake")
+
+if(CJSON_UTILS_FOUND)
+  # The cJSON utils library
+  set(CJSON_UTILS_LIBRARY @CJSON_UTILS_LIB@)
+  # All cJSON libraries
+  set(CJSON_LIBRARIES "@CJSON_UTILS_LIB@" "@CJSON_LIB@")
+  # Include the target
+  include("${_dir}/cjson_utils.cmake")
+else()
+  # All cJSON libraries
+  set(CJSON_LIBRARIES "@CJSON_LIB@")
+endif()