@@ -6,7 +6,11 @@ if (POLICY CMP0141)
66 set (CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>" )
77endif ()
88
9- project ("MyLibrary" )
9+ set (MYLIBRARY_INCLUDE_DIR
10+ $< BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include>
11+ $< INSTALL_INTERFACE:include> )
12+
13+ project ("MyLibrary" )
1014set (PROJECT_VERSION_MAJOR 1 )
1115set (PROJECT_VERSION_MINOR 0 )
1216set (PROJECT_VERSION_PATCH 0 )
@@ -19,6 +23,7 @@ string(COMPARE EQUAL "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}" MYLIBRA
1923option (MYLIBRARY_BUILD_EXAMPLES "Build the ${PROJECT_NAME} example programs" ${MYLIBRARY_STANDALONE} )
2024option (MYLIBRARY_BUILD_TESTS "Build the ${PROJECT_NAME} test programs" ${MYLIBRARY_STANDALONE} )
2125option (MYLIBRARY_BUILD_DOCS "Build the ${PROJECT_NAME} HTML documentation." ON )
26+ option (MYLIBRARY_INSTALL "Generate the ${PROJECT_NAME} installation target" ON )
2227
2328# Add CMake modules to this project
2429list (APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR} /cmake" )
@@ -28,13 +33,13 @@ add_library(${PROJECT_NAME})
2833add_subdirectory ("src" )
2934
3035# Add template header files (.hpp) to this project
31- file (GLOB_RECURSE TEMPLATE_FILES CONFIGURE_DEPENDS "include /*.hpp" )
36+ file (GLOB_RECURSE TEMPLATE_FILES CONFIGURE_DEPENDS "${MYLIBRARY_INCLUDE_DIR} /*.hpp" )
3237target_sources (${PROJECT_NAME} PUBLIC ${TEMPLATE_FILES} )
3338
3439# Add normal header files (.h) to this project
35- file (GLOB_RECURSE HEADER_FILES CONFIGURE_DEPENDS "include /*.h" )
40+ file (GLOB_RECURSE HEADER_FILES CONFIGURE_DEPENDS "${MYLIBRARY_INCLUDE_DIR} /*.h" )
3641target_sources (${PROJECT_NAME} PUBLIC ${HEADER_FILES} )
37- target_include_directories (${PROJECT_NAME} PUBLIC "include" )
42+ target_include_directories (${PROJECT_NAME} PUBLIC ${MYLIBRARY_INCLUDE_DIR} )
3843target_compile_features (${PROJECT_NAME} PUBLIC cxx_std_20 )
3944
4045# Fix CMake Issue #18837
@@ -66,4 +71,39 @@ endif()
6671# Add documentation to this project.
6772if (MYLIBRARY_BUILD_DOCS )
6873 add_subdirectory ("docs" )
74+ endif ()
75+
76+ # Add installation target to this project.
77+ if (MYLIBRARY_INSTALL )
78+ install (DIRECTORY ${MYLIBRARY_INCLUDE_DIR}
79+ DESTINATION ${CMAKE_INSTALL_PREFIX}
80+ FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp" )
81+
82+ set (MYLIBRARY_EXPORT_TARGETS "${PROJECT_NAME} Targets" )
83+ set (MYLIBRARY_EXPORT_TARGETS_FILE "${MYLIBRARY_EXPORT_TARGETS} .cmake" )
84+ set (MYLIBRARY_EXPORT_PATH "${CMAKE_INSTALL_LIBDIR} /cmake/${PROJECT_NAME} " )
85+ install (TARGETS ${PROJECT_NAME}
86+ EXPORT ${MYLIBRARY_EXPORT_TARGETS} )
87+ install (EXPORT ${MYLIBRARY_EXPORT_TARGETS}
88+ FILE ${MYLIBRARY_EXPORT_TARGETS_FILE}
89+ NAMESPACE ${PROJECT_NAME} ::
90+ DESTINATION ${MYLIBRARY_EXPORT_PATH} )
91+
92+ set (MYLIBRARY_EXPORT_CONFIGS_FILE "${PROJECT_NAME} Config.cmake" )
93+ include (CMakePackageConfigHelpers )
94+ configure_package_config_file (
95+ "${CMAKE_CURRENT_SOURCE_DIR} /cmake/${MYLIBRARY_EXPORT_CONFIGS_FILE} "
96+ "${CMAKE_CURRENT_BINARY_DIR} /${MYLIBRARY_EXPORT_CONFIGS_FILE} "
97+ INSTALL_DESTINATION ${MYLIBRARY_EXPORT_PATH} )
98+
99+ set (MYLIBRARY_EXPORT_CONFIGS_VERSION_FILE "${PROJECT_NAME} ConfigVersion.cmake" )
100+ write_basic_package_version_file (
101+ ${MYLIBRARY_EXPORT_CONFIGS_VERSION_FILE}
102+ VERSION ${PACKAGE_VERSION}
103+ COMPATIBILITY SameMajorVersion )
104+
105+ install (FILES
106+ "${CMAKE_CURRENT_BINARY_DIR} /${MYLIBRARY_EXPORT_CONFIGS_FILE} "
107+ "${CMAKE_CURRENT_BINARY_DIR} /${MYLIBRARY_EXPORT_CONFIGS_VERSION_FILE} "
108+ DESTINATION ${MYLIBRARY_EXPORT_PATH} )
69109endif ()
0 commit comments