Repository navigation
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
110 lines (93 loc) · 3.03 KB
/
Copy pathCMakeLists.txt
File metadata and controls
110 lines (93 loc) · 3.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# Eggs.KeyedSet
#
# Copyright Agustin K-ballo Berge, Fusion Fenix 2026
#
# Distributed under the Boost Software License, Version 1.0. (See accompanying
# file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
cmake_minimum_required(VERSION 3.25...4.2.3)
project(Eggs.KeyedSet DESCRIPTION "A C++23 keyed-set container" LANGUAGES CXX)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(GNUInstallDirs)
# Options (two spellings: short when top-level, prefixed when a subdirectory)
if(PROJECT_IS_TOP_LEVEL)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set(CMAKE_CXX_SCAN_FOR_MODULES OFF)
option(BUILD_EXAMPLES "Build the examples" ON)
include(CTest) # option(BUILD_TESTING ...)
option(ENABLE_INSTALL "Generate install rules" ON)
set(SYSTEM OFF)
else()
option(EGGS_KEYED_SET_BUILD_EXAMPLES "Build the examples" OFF)
option(EGGS_KEYED_SET_BUILD_TESTING "Build the testing tree" OFF)
option(EGGS_KEYED_SET_ENABLE_INSTALL "Generate install rules" OFF)
# Map prefixed options back to the canonical names used below
set(BUILD_EXAMPLES ${EGGS_KEYED_SET_BUILD_EXAMPLES})
set(BUILD_TESTING ${EGGS_KEYED_SET_BUILD_TESTING})
set(ENABLE_INSTALL ${EGGS_KEYED_SET_ENABLE_INSTALL})
set(SYSTEM ON)
endif()
#
# Library target — header-only INTERFACE library.
# Internal name _eggs_keyed_set; downstream CMake code uses the alias Eggs::KeyedSet.
#
add_library(_eggs_keyed_set INTERFACE)
target_sources(
_eggs_keyed_set
INTERFACE
FILE_SET HEADERS BASE_DIRS include FILES include/eggs/keyed_set.hpp
)
set_target_properties(
_eggs_keyed_set
PROPERTIES
EXPORT_NAME KeyedSet
SYSTEM ${SYSTEM}
VERIFY_INTERFACE_HEADER_SETS ${BUILD_TESTING}
)
target_compile_features(_eggs_keyed_set INTERFACE cxx_std_23)
add_library(Eggs::KeyedSet ALIAS _eggs_keyed_set)
#
# Examples
#
if(BUILD_EXAMPLES)
add_subdirectory(example)
endif()
#
# Test suite
#
if(BUILD_TESTING)
enable_testing()
add_subdirectory(test)
endif()
#
# Install rules
#
if(ENABLE_INSTALL)
include(CMakePackageConfigHelpers)
install(
TARGETS _eggs_keyed_set
EXPORT EggsKeyedSetTargets
FILE_SET HEADERS DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(
EXPORT EggsKeyedSetTargets
NAMESPACE Eggs::
FILE eggs.keyedset-targets.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/eggs.keyedset
)
configure_package_config_file(
cmake/eggs.keyedset-config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/eggs.keyedset-config.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/eggs.keyedset
)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/eggs.keyedset-config-version.cmake
VERSION 1.0.0
COMPATIBILITY SameMajorVersion
)
install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/eggs.keyedset-config.cmake
${CMAKE_CURRENT_BINARY_DIR}/eggs.keyedset-config-version.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/eggs.keyedset
)
endif()