-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
189 lines (157 loc) · 5.27 KB
/
CMakeLists.txt
File metadata and controls
189 lines (157 loc) · 5.27 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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# CMake 3.30 is required for C++23 `import std` support;
cmake_minimum_required(VERSION 3.30...4.2)
include(cmake/prelude.cmake)
#==================================================
project(my_package VERSION 0.2.0 LANGUAGES CXX)
#==================================================
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN YES)
set(CMAKE_SKIP_TEST_ALL_DEPENDENCY NO)
if(PROJECT_IS_TOP_LEVEL)
include(cmake/AddUninstallTarget.cmake)
endif()
include(cmake/cxx-modules-rules.cmake)
##################################################
add_library(Algo)
add_library(my_package::Algo ALIAS Algo)
target_sources(
Algo
PRIVATE algo-impl.cpp
PUBLIC FILE_SET CXX_MODULES FILES algo-interface.cppm
)
# CMake requires the language standard to be specified as compile feature
# when a target provides C++23 modules and the target will be installed
target_compile_features(Algo PUBLIC cxx_std_23)
if(CMAKE_CXX_MODULE_STD)
target_compile_definitions(Algo PUBLIC HAS_IMPORT_STD)
else()
message(FATAL_ERROR "Missing support for CMAKE_CXX_MODULE_STD!")
endif()
# XXX target_link_libraries(Algo PUBLIC $<BUILD_INTERFACE:a4z::commonCompilerWarnings>)
include(GenerateExportHeader)
generate_export_header(Algo CUSTOM_CONTENT_FROM_VARIABLE)
target_sources(
Algo
PUBLIC
FILE_SET HEADERS
BASE_DIRS ${CMAKE_CURRENT_BINARY_DIR}
FILES ${CMAKE_CURRENT_BINARY_DIR}/algo_export.h
)
if(NOT CMAKE_SKIP_INSTALL_RULES)
include(CPack)
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"my_package-config-version.cmake"
COMPATIBILITY SameMajorVersion
)
install(
TARGETS Algo
EXPORT my_package-targets
# ... a few details omitted, see the "Deep CMake For Library Authors" talk
FILE_SET CXX_MODULES
# There's currently no convention for this location, see discussion below
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/my_package/modules
CXX_MODULES_BMI
DESTINATION
${CMAKE_INSTALL_LIBDIR}/cmake/my_package/bmi-${CMAKE_CXX_COMPILER_ID}_$<CONFIG>
FILE_SET HEADERS
DESTINATION
${CMAKE_INSTALL_INCLUDEDIR} # Same as default, could be omitted
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(
EXPORT my_package-targets
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/my_package
CXX_MODULES_DIRECTORY
.
NAMESPACE my_package::
)
install(
FILES "${PROJECT_BINARY_DIR}/my_package-config-version.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/my_package
)
# The following file includes the my_package-targets.cmake file
install(
FILES cmake/my_package-config.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/my_package
)
endif()
if(PROJECT_IS_TOP_LEVEL)
enable_testing()
add_subdirectory(example)
endif()
if(ALGO_USE_MODULES)
##################################################
return()
##################################################
endif()
# project(
# cmake-init-modules
# VERSION 0.2.0
# DESCRIPTION "Short description"
# HOMEPAGE_URL "https://example.com/"
# LANGUAGES CXX)
include(cmake/variables.cmake)
# ---- Declare library ----
add_library(cmake-init-modules_cmake-init-modules source/cmake-init-modules.cpp)
add_library(
cmake-init-modules::cmake-init-modules
ALIAS cmake-init-modules_cmake-init-modules
)
include(GenerateExportHeader)
generate_export_header(
cmake-init-modules_cmake-init-modules
BASE_NAME cmake-init-modules
EXPORT_FILE_NAME export/cmake-init-modules/cmake-init-modules_export.hpp
CUSTOM_CONTENT_FROM_VARIABLE pragma_suppress_c4251
)
target_sources(
cmake-init-modules_cmake-init-modules
PUBLIC
FILE_SET HEADERS
BASE_DIRS ${PROJECT_BINARY_DIR}/export ${PROJECT_SOURCE_DIR}/include
FILES
include/cmake-init-modules/cmake-init-modules.hpp
${PROJECT_BINARY_DIR}/export/cmake-init-modules/cmake-init-modules_export.hpp
)
if(NOT BUILD_SHARED_LIBS)
target_compile_definitions(
cmake-init-modules_cmake-init-modules
PUBLIC CMAKE_INIT_MODULES_STATIC_DEFINE
)
endif()
set_target_properties(
cmake-init-modules_cmake-init-modules
PROPERTIES
CXX_VISIBILITY_PRESET hidden
VISIBILITY_INLINES_HIDDEN YES
VERSION "${PROJECT_VERSION}"
SOVERSION "${PROJECT_VERSION_MAJOR}"
EXPORT_NAME cmake-init-modules
OUTPUT_NAME cmake-init-modules
)
target_compile_features(cmake-init-modules_cmake-init-modules PUBLIC cxx_std_23)
# ---- Install rules ----
if(NOT CMAKE_SKIP_INSTALL_RULES)
include(cmake/install-rules.cmake)
endif()
# ---- Examples ----
enable_testing()
# if(PROJECT_IS_TOP_LEVEL)
# option(BUILD_EXAMPLES "Build examples tree." "${cmake-init-modules_DEVELOPER_MODE}")
# if(BUILD_EXAMPLES)
# add_subdirectory(example)
# endif()
# endif()
# ---- Developer mode ----
if(NOT cmake-init-modules_DEVELOPER_MODE)
return()
elseif(NOT PROJECT_IS_TOP_LEVEL)
message(
AUTHOR_WARNING
"Developer mode is intended for developers of cmake-init-modules"
)
endif()
include(cmake/dev-mode.cmake)
##################################################