Skip to content
This repository was archived by the owner on Jul 24, 2025. It is now read-only.

Commit 7f5cc58

Browse files
committed
Merge branch 'development' into release
2 parents ef94e49 + b308fc2 commit 7f5cc58

File tree

3 files changed

+59
-4
lines changed

3 files changed

+59
-4
lines changed

CMakeLists.txt

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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>>")
77
endif()
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")
1014
set(PROJECT_VERSION_MAJOR 1)
1115
set(PROJECT_VERSION_MINOR 0)
1216
set(PROJECT_VERSION_PATCH 0)
@@ -19,6 +23,7 @@ string(COMPARE EQUAL "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}" MYLIBRA
1923
option(MYLIBRARY_BUILD_EXAMPLES "Build the ${PROJECT_NAME} example programs" ${MYLIBRARY_STANDALONE})
2024
option(MYLIBRARY_BUILD_TESTS "Build the ${PROJECT_NAME} test programs" ${MYLIBRARY_STANDALONE})
2125
option(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
2429
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
@@ -28,21 +33,29 @@ add_library(${PROJECT_NAME})
2833
add_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")
3237
target_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")
3641
target_sources(${PROJECT_NAME} PUBLIC ${HEADER_FILES})
37-
target_include_directories(${PROJECT_NAME} PUBLIC "include")
42+
target_include_directories(${PROJECT_NAME} PUBLIC ${MYLIBRARY_INCLUDE_DIR})
3843
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
3944

4045
# Fix CMake Issue #18837
4146
# https://gitlab.kitware.com/cmake/cmake/-/issues/18837
47+
# This is required for making the standard conforming __cplusplus macro the correct value
4248
if ((MSVC) AND (MSVC_VERSION GREATER_EQUAL 1914))
4349
target_compile_options(${PROJECT_NAME} PUBLIC "/Zc:__cplusplus")
4450
endif()
4551

52+
# Fix CMake Issue #17068
53+
# https://gitlab.kitware.com/cmake/cmake/-/issues/17068
54+
# This is required for making some standard conforming features compilable
55+
if ((MSVC) AND (MSVC_VERSION GREATER_EQUAL 1912))
56+
target_compile_options(${PROJECT_NAME} PUBLIC "/permissive-")
57+
endif()
58+
4659
# Add example programs to this project.
4760
if (MYLIBRARY_BUILD_EXAMPLES)
4861
add_subdirectory("examples")
@@ -58,4 +71,39 @@ endif()
5871
# Add documentation to this project.
5972
if (MYLIBRARY_BUILD_DOCS)
6073
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})
61109
endif()

cmake/FetchGoogleTest.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@ FetchContent_Declare(
44
GIT_REPOSITORY https://github.com/google/googletest.git
55
GIT_TAG v1.12.0
66
)
7+
set(INSTALL_GTEST OFF)
78
FetchContent_MakeAvailable(googletest)
89
include(GoogleTest)

cmake/MyLibraryConfig.cmake

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
@PACKAGE_INIT@
2+
file(GLOB EXPORT_FILES "${CMAKE_CURRENT_LIST_DIR}/*Targets.cmake")
3+
foreach(EXPORT_FILE ${EXPORT_FILES})
4+
include(${EXPORT_FILE})
5+
endforeach()
6+
check_required_components(MyLibrary::MyLibrary)

0 commit comments

Comments
 (0)