Metahuman_DNA_Calibration/dnacalib/CMakeModulesExtra/install/InstallLibrary.cmake

105 lines
3.7 KiB
CMake
Raw Permalink Normal View History

2022-10-31 18:15:50 +08:00
# Standard CMake library installation procedure
#
# Usage:
# include(InstallLibrary)
# install_library(my_target)
#
# Module dependencies:
# CMakePackageConfigHelpers
# GNUInstallDirs
#
# Preconditions:
# Assumes that standard, global CMake variables are accessible, such as PROJECT_NAME
set(INSTALL_LIBRARY_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}")
macro(install_library target_name)
2024-08-15 16:04:44 +08:00
# component_name is an optional argument, and will default to the given target_name
set(COMPONENT_NAME ${target_name})
set(extra_args ${ARGN})
list(LENGTH extra_args num_extra_args)
if(${num_extra_args} GREATER 0)
list(GET extra_args 0 COMPONENT_NAME)
endif()
2022-10-31 18:15:50 +08:00
include(GNUInstallDirs)
set(REPRESENTATIVE_TARGET_NAME ${target_name})
set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
# Set install destinations and associate installed target files with an export
install(TARGETS ${REPRESENTATIVE_TARGET_NAME}
EXPORT ${PROJECT_NAME}-targets
2024-08-15 16:04:44 +08:00
COMPONENT ${COMPONENT_NAME}
RUNTIME
DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT ${COMPONENT_NAME}
LIBRARY
DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT ${COMPONENT_NAME}
NAMELINK_COMPONENT ${COMPONENT_NAME}
ARCHIVE
DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT ${COMPONENT_NAME}
PUBLIC_HEADER
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
COMPONENT ${COMPONENT_NAME}
2022-10-31 18:15:50 +08:00
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
# Write build-tree targets
export(TARGETS ${REPRESENTATIVE_TARGET_NAME}
FILE ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake
NAMESPACE ${PROJECT_NAME}::)
# Allow find_package to locate package without installing it (find it's build-tree)
export(PACKAGE ${PROJECT_NAME})
# Write install-tree targets
install(EXPORT ${PROJECT_NAME}-targets
FILE ${PROJECT_NAME}Targets.cmake
NAMESPACE ${PROJECT_NAME}::
2024-08-15 16:04:44 +08:00
DESTINATION ${INSTALL_CONFIGDIR}
COMPONENT ${COMPONENT_NAME})
2022-10-31 18:15:50 +08:00
include(CMakePackageConfigHelpers)
# Generate build-tree configuration
set(INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
set(LIB_DIR ${CMAKE_CURRENT_BINARY_DIR})
configure_package_config_file("${INSTALL_LIBRARY_SOURCE_DIR}/Config.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
INSTALL_DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
PATH_VARS INCLUDE_DIR LIB_DIR
INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR})
# Generate install-tree configuration
set(INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR})
set(LIB_DIR ${CMAKE_INSTALL_LIBDIR})
configure_package_config_file("${INSTALL_LIBRARY_SOURCE_DIR}/Config.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.install.cmake"
INSTALL_DESTINATION ${INSTALL_CONFIGDIR}
PATH_VARS INCLUDE_DIR LIB_DIR)
# Generate package version file
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion)
# Install the install-tree configuration
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.install.cmake"
DESTINATION ${INSTALL_CONFIGDIR}
2024-08-15 16:04:44 +08:00
RENAME "${PROJECT_NAME}Config.cmake"
COMPONENT ${COMPONENT_NAME})
2022-10-31 18:15:50 +08:00
# Install package version file
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
2024-08-15 16:04:44 +08:00
DESTINATION ${INSTALL_CONFIGDIR}
COMPONENT ${COMPONENT_NAME})
2022-10-31 18:15:50 +08:00
# Install include files
2024-08-15 16:04:44 +08:00
install(DIRECTORY include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
COMPONENT ${COMPONENT_NAME})
2022-10-31 18:15:50 +08:00
endmacro()