diff --git a/CMakeLists.txt b/CMakeLists.txt index fd00611..f8d8d9f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,3 +31,64 @@ if(BUILD_EXAMPLES) add_executable(${EXAM_HMAP} examples/hmap_example.cpp) target_link_libraries(${EXAM_HMAP} ${PROJECT_NAME}) endif() + + +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) + +install( + TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}_Targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) + + +set(SNPLIB_CONFIG_INSTALLDIR + ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} + # CACHE PATH + # "install path for generated library config files" +) +set(SNPLIB_HEADERS_INSTALLDIR + ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} + # CACHE PATH + # "install path for headers" +) + +configure_package_config_file( + "${PROJECT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in" + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + INSTALL_DESTINATION ${SNPLIB_CONFIG_INSTALLDIR} + PATH_VARS SNPLIB_HEADERS_INSTALLDIR +) + +install( + EXPORT ${PROJECT_NAME}_Targets + FILE ${PROJECT_NAME}Targets.cmake + NAMESPACE ${PROJECT_NAME_NAMESPACE}:: + DESTINATION ${SNPLIB_CONFIG_INSTALLDIR} +) +install( + FILES + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + DESTINATION ${SNPLIB_CONFIG_INSTALLDIR} +) +install(FILES ${SNPLIB_SRC} DESTINATION include/${PROJECT_NAME}) + +# uninstall target +if(NOT TARGET uninstall) + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" + IMMEDIATE + @ONLY + ) + + add_custom_target( + uninstall + COMMAND + ${CMAKE_COMMAND} -P + ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake + ) +endif() diff --git a/cmake_uninstall.cmake.in b/cmake_uninstall.cmake.in new file mode 100644 index 0000000..8f83b8b --- /dev/null +++ b/cmake_uninstall.cmake.in @@ -0,0 +1,5 @@ +message(STATUS "Uninstall snipplib package ...") +message(STATUS "remove config files dir: @CMAKE_INSTALL_PREFIX@/@SNPLIB_CONFIG_INSTALLDIR@") +file(REMOVE_RECURSE "@CMAKE_INSTALL_PREFIX@/@SNPLIB_CONFIG_INSTALLDIR@") +message(STATUS "remove header files dir: @CMAKE_INSTALL_PREFIX@/@SNPLIB_HEADERS_INSTALLDIR@") +file(REMOVE_RECURSE "@CMAKE_INSTALL_PREFIX@/@SNPLIB_HEADERS_INSTALLDIR@") diff --git a/snipplibConfig.cmake.in b/snipplibConfig.cmake.in new file mode 100644 index 0000000..22112cf --- /dev/null +++ b/snipplibConfig.cmake.in @@ -0,0 +1,7 @@ +@PACKAGE_INIT@ + +set_and_check(snipplib_INCLUDE_DIR "@PACKAGE_SNPLIB_HEADERS_INSTALLDIR@") + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") +check_required_components("@PROJECT_NAME@") +