Skip to content

Commit 4868fe2

Browse files
committed
Export cmake config package
1 parent f6926dc commit 4868fe2

File tree

5 files changed

+64
-62
lines changed

5 files changed

+64
-62
lines changed

CMakeLists.txt

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,18 @@
22
#
33
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
44

5-
cmake_minimum_required(VERSION 3.27)
5+
cmake_minimum_required(VERSION 3.27...3.31)
66

77
project(beman_optional26 VERSION 0.0.0 LANGUAGES CXX)
88

99
# Includes
10-
include(CTest)
11-
include(FetchContent)
10+
include(CPack)
11+
include(GNUInstallDirs)
12+
include(CMakePackageConfigHelpers)
1213

13-
set(TARGETS_EXPORT_NAME ${CMAKE_PROJECT_NAME}Targets)
14+
set(TARGET_PACKAGE_NAME ${PROJECT_NAME})
15+
set(TARGETS_EXPORT_NAME ${TARGET_PACKAGE_NAME}-targets)
16+
set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/${TARGET_PACKAGE_NAME})
1417

1518
option(
1619
OPTIONAL26_ENABLE_TESTING
@@ -20,6 +23,8 @@ option(
2023

2124
# Build the tests if enabled via the option OPTIONAL26_ENABLE_TESTING
2225
if(OPTIONAL26_ENABLE_TESTING)
26+
include(FetchContent)
27+
2328
# Fetch GoogleTest
2429
FetchContent_Declare(
2530
googletest
@@ -29,12 +34,15 @@ if(OPTIONAL26_ENABLE_TESTING)
2934
e39786088138f2749d64e9e90e0f9902daa77c40 # release-1.15.0
3035
)
3136
FetchContent_MakeAvailable(googletest)
37+
38+
enable_testing()
3239
endif()
3340

3441
set(CMAKE_VERIFY_INTERFACE_HEADER_SETS ON)
3542

3643
# Create the library target and named header set for beman_optional26
3744
add_library(beman_optional26 INTERFACE)
45+
add_library(Beman::Optional26::beman_optional26 ALIAS beman_optional26)
3846
target_sources(
3947
beman_optional26
4048
PUBLIC FILE_SET beman_optional26_headers TYPE HEADERS BASE_DIRS include
@@ -59,23 +67,24 @@ add_subdirectory(include/beman/optional26)
5967

6068
add_subdirectory(examples)
6169

62-
include(CMakePackageConfigHelpers)
70+
# install
71+
write_basic_package_version_file(
72+
${CMAKE_CURRENT_BINARY_DIR}/${TARGET_PACKAGE_NAME}-config-version.cmake
73+
VERSION ${PROJECT_VERSION}
74+
COMPATIBILITY AnyNewerVersion
75+
)
6376

64-
# This will be used to replace @PACKAGE_cmakeModulesDir@
65-
set(cmakeModulesDir cmake/beman)
6677
configure_package_config_file(
6778
cmake/Config.cmake.in
68-
BemanOptional26Config.cmake
69-
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/beman/optional26/
70-
PATH_VARS cmakeModulesDir
71-
NO_SET_AND_CHECK_MACRO
72-
NO_CHECK_REQUIRED_COMPONENTS_MACRO
79+
${CMAKE_CURRENT_BINARY_DIR}/${TARGET_PACKAGE_NAME}-config.cmake
80+
INSTALL_DESTINATION ${INSTALL_CONFIGDIR}
7381
)
7482

7583
install(
76-
FILES ${CMAKE_CURRENT_BINARY_DIR}/BemanOptional26Config.cmake
77-
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/beman/optional26/
78-
COMPONENT beman_optional26_development
84+
FILES
85+
${CMAKE_CURRENT_BINARY_DIR}/${TARGET_PACKAGE_NAME}-config.cmake
86+
${CMAKE_CURRENT_BINARY_DIR}/${TARGET_PACKAGE_NAME}-config-version.cmake
87+
DESTINATION ${INSTALL_CONFIGDIR}
7988
)
8089

8190
# Coverage

CMakePresets.json

Lines changed: 14 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"version": 6,
33
"cmakeMinimumRequired": {
44
"major": 3,
5-
"minor": 29,
5+
"minor": 27,
66
"patch": 2
77
},
88
"configurePresets": [
@@ -88,35 +88,24 @@
8888
"configuration": "Asan",
8989
"targets": [
9090
"all_verify_interface_header_sets",
91-
"all"
91+
"all",
92+
"install"
9293
]
9394
},
9495
{
9596
"name": "system",
9697
"inherits": "common",
97-
"configurePreset": "system",
98-
"targets": [
99-
"all_verify_interface_header_sets",
100-
"all"
101-
]
98+
"configurePreset": "system"
10299
},
103100
{
104101
"name": "gcc-14",
105102
"inherits": "common",
106-
"configurePreset": "gcc-14",
107-
"targets": [
108-
"all_verify_interface_header_sets",
109-
"all"
110-
]
103+
"configurePreset": "gcc-14"
111104
},
112105
{
113106
"name": "gcc-13",
114107
"inherits": "common",
115-
"configurePreset": "gcc-13",
116-
"targets": [
117-
"all_verify_interface_header_sets",
118-
"all"
119-
]
108+
"configurePreset": "gcc-13"
120109
},
121110
{
122111
"name": "gcc-12",
@@ -131,29 +120,22 @@
131120
{
132121
"name": "clang-19",
133122
"inherits": "common",
134-
"configurePreset": "clang-19",
135-
"targets": [
136-
"all_verify_interface_header_sets",
137-
"all"
138-
]
123+
"configurePreset": "clang-19"
139124
},
140125
{
141126
"name": "clang-18",
142127
"inherits": "common",
143-
"configurePreset": "clang-18",
144-
"targets": [
145-
"all_verify_interface_header_sets",
146-
"all"
147-
]
128+
"configurePreset": "clang-18"
148129
},
149130
{
150131
"name": "clang-17",
151132
"inherits": "common",
152-
"configurePreset": "clang-17",
153-
"targets": [
154-
"all_verify_interface_header_sets",
155-
"all"
156-
]
133+
"configurePreset": "clang-17"
134+
},
135+
{
136+
"name": "clang-16",
137+
"inherits": "common",
138+
"configurePreset": "clang-16"
157139
}
158140
],
159141
"testPresets": [

examples/CMakeLists.txt

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,15 @@
33
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
44
# cmake-format: on
55

6-
set(BEMAN_OPTIONAL26_LIBRARY "beman_optional26")
6+
cmake_minimum_required(VERSION 3.27...3.31)
77

8-
include(GNUInstallDirs)
8+
project(beman_optional26_example VERSION 0.0.0 LANGUAGES CXX)
9+
10+
set(BEMAN_OPTIONAL26_LIBRARY "Beman::Optional26::beman_optional26")
11+
12+
if(PROJECT_IS_TOP_LEVEL)
13+
find_package(beman_optional26 0.0.0 EXACT REQUIRED)
14+
endif()
915

1016
# List of all buildable examples.
1117
set(EXAMPLES
@@ -27,13 +33,15 @@ foreach(example ${EXAMPLES})
2733
# Link example with the library.
2834
target_link_libraries(${example} "${BEMAN_OPTIONAL26_LIBRARY}")
2935

30-
# Install .
31-
install(
32-
TARGETS
33-
${example}
34-
COMPONENT
35-
beman_optional26_examples
36-
DESTINATION
37-
${CMAKE_INSTALL_BINDIR}
38-
)
36+
if(NOT PROJECT_IS_TOP_LEVEL)
37+
# Install .
38+
install(
39+
TARGETS
40+
${example}
41+
COMPONENT
42+
beman_optional26_examples
43+
DESTINATION
44+
${CMAKE_INSTALL_BINDIR}
45+
)
46+
endif()
3947
endforeach()

include/beman/optional26/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ install(
3333

3434
install(
3535
EXPORT beman_optional26_export
36-
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/beman/optional26/
36+
DESTINATION ${INSTALL_CONFIGDIR}
3737
NAMESPACE Beman::Optional26::
38-
FILE beman_optional26.cmake
38+
FILE beman_optional26-config-targets.cmake
3939
EXPORT_LINK_INTERFACE_LIBRARIES
4040
COMPONENT beman_optional26_development
4141
)

src/beman/optional26/tests/CMakeLists.txt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ target_sources(
2929

3030
target_link_libraries(
3131
beman_optional26_test
32-
PRIVATE beman_optional26 GTest::gtest GTest::gtest_main
32+
PRIVATE Beman::Optional26::beman_optional26 GTest::gtest GTest::gtest_main
3333
)
3434

3535
# Issue #32: Re-enable ASAN run CI/clang-19.
@@ -41,7 +41,10 @@ gtest_add_tests(TARGET beman_optional26_test "" AUTO)
4141

4242
add_library(constructor_fails test_constructor_fail.cpp)
4343

44-
target_link_libraries(constructor_fails PRIVATE beman_optional26)
44+
target_link_libraries(
45+
constructor_fails
46+
PRIVATE Beman::Optional26::beman_optional26
47+
)
4548

4649
set_target_properties(
4750
constructor_fails

0 commit comments

Comments
 (0)