Browse Source

Modern cmake for a self configurable relocatable install patern

XB32Z 8 years ago
parent
commit
cd3ea46cc4
2 changed files with 38 additions and 3 deletions
  1. 35 3
      CMakeLists.txt
  2. 3 0
      tools/cmake/open62541-config.cmake.in

+ 35 - 3
CMakeLists.txt

@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 2.8.11)
+cmake_minimum_required(VERSION 3.0)
 project(open62541)
 # set(CMAKE_VERBOSE_MAKEFILE ON)
 
@@ -483,12 +483,43 @@ add_dependencies(lint open62541)
 # specify install location with `-DCMAKE_INSTALL_PREFIX=xyz`
 # Enable shared library with `-DBUILD_SHARED_LIBS=ON`
 
+set(cmake_configfile_install lib/cmake)
+set(target_install_dest_name "${cmake_configfile_install}/open62541Targets.cmake")
+set(open62541_tools_dir share/open62541/tools)
+set(open62541_deps_dir include/open62541/deps)
+
 # export library (either static or shared depending on BUILD_SHARED_LIBS)
 install(TARGETS open62541
+        EXPORT open62541Targets
         LIBRARY DESTINATION lib
-        ARCHIVE DESTINATION lib)
+        ARCHIVE DESTINATION lib
+        INCLUDES DESTINATION include/open62541 ${open62541_deps_dir})
+
+include(CMakePackageConfigHelpers)
+configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/tools/cmake/open62541-config.cmake.in"
+                              "${CMAKE_CURRENT_BINARY_DIR}/cmake/open62541-config.cmake"
+                              INSTALL_DESTINATION "${cmake_configfile_install}"
+                              PATH_VARS target_install_dest_name open62541_tools_dir)
+
+set(open62541_VERSION)
+get_target_property(open62541_VERSION open62541 VERSION)
+
+write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/open62541ConfigVersion.cmake"
+                                 VERSION ${open62541_VERSION}
+                                 COMPATIBILITY AnyNewerVersion)
+
+install(EXPORT open62541Targets
+        FILE open62541Targets.cmake
+        DESTINATION "${cmake_configfile_install}")
+
+install(FILES "${CMAKE_CURRENT_BINARY_DIR}/cmake/open62541-config.cmake"
+              "${CMAKE_CURRENT_BINARY_DIR}/open62541ConfigVersion.cmake"
+        DESTINATION "${cmake_configfile_install}")
+
 # export amalgamated header open62541.h which is generated due to build of open62541-object
-install(FILES ${PROJECT_BINARY_DIR}/open62541.h DESTINATION include)
+install(FILES ${PROJECT_BINARY_DIR}/open62541.h DESTINATION include/open62541)
+install(DIRECTORY deps/ DESTINATION ${open62541_deps_dir})
+install(DIRECTORY tools/ DESTINATION ${open62541_tools_dir} USE_SOURCE_PERMISSIONS)
 
 ##########################
 # Packaging (DEB/RPM)    #
@@ -511,6 +542,7 @@ include(CPack)
 ##################################
 # Visual studio solution folders #
 ##################################
+
 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
 set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "_CmakePredifinedTargets")
 

+ 3 - 0
tools/cmake/open62541-config.cmake.in

@@ -0,0 +1,3 @@
+@PACKAGE_INIT@
+
+include ("@PACKAGE_target_install_dest_name@")