Skip to content

Commit 96711b6

Browse files
committed
Cleaned up CMake build. Added namespace targets for subdirectory builds.
1 parent 36af577 commit 96711b6

File tree

10 files changed

+218
-296
lines changed

10 files changed

+218
-296
lines changed

CMakeLists.txt

Lines changed: 32 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# ---------------------------------------------------------------------------
66
# This file is part of the "sockpp" C++ socket library.
77
#
8-
# Copyright (c) 2017-2023 Frank Pagliughi
8+
# Copyright (c) 2017-2024 Frank Pagliughi
99
# All rights reserved.
1010
#
1111
# Redistribution and use in source and binary forms, with or without
@@ -67,19 +67,34 @@ endif()
6767

6868
# --- Setting naming variables ---
6969

70-
set(SOCKPP_SHARED_LIBRARY sockpp)
71-
set(SOCKPP_STATIC_LIBRARY sockpp-static)
72-
set(SOCKPP_OBJECT_LIBRARY sockpp-objs)
73-
7470
set(SOCKPP_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)
7571
set(SOCKPP_GENERATED_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated)
7672

73+
# --- Collect the targets names ---
74+
75+
if(${SOCKPP_BUILD_SHARED})
76+
list(APPEND SOCKPP_TARGETS sockpp-shared)
77+
endif()
78+
79+
if(${SOCKPP_BUILD_STATIC})
80+
list(APPEND SOCKPP_TARGETS sockpp-static)
81+
endif()
82+
83+
if(NOT SOCKPP_TARGETS)
84+
message(FATAL_ERROR "No targets are specified")
85+
endif()
86+
7787
# --- Project uses C++17 ---
7888

7989
set(CMAKE_CXX_STANDARD 17)
8090
set(CMAKE_CXX_STANDARD_REQUIRED ON)
8191
set(CMAKE_CXX_EXTENSIONS OFF)
8292

93+
if(WIN32)
94+
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
95+
set(LIBS_SYSTEM ws2_32)
96+
endif()
97+
8398
# --- Generate a version header ---
8499

85100
configure_file(
@@ -92,125 +107,18 @@ configure_file(
92107

93108
add_subdirectory(src)
94109

95-
# --- System libraries ---
96-
97-
if(WIN32)
98-
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
99-
set(LIBS_SYSTEM ws2_32)
100-
endif()
101-
102-
# --- Collect the targets names ---
103-
104-
if(${SOCKPP_BUILD_SHARED})
105-
list(APPEND SOCKPP_TARGETS ${SOCKPP_SHARED_LIBRARY})
106-
endif()
107-
108-
if(${SOCKPP_BUILD_STATIC})
109-
list(APPEND SOCKPP_TARGETS ${SOCKPP_STATIC_LIBRARY})
110-
endif()
111-
112-
# --- Create the libraries and export them ---
113-
114-
if(NOT SOCKPP_TARGETS)
115-
message(FATAL_ERROR "No targets are specified")
116-
endif()
117-
118-
if(${SOCKPP_BUILD_SHARED})
119-
message(STATUS "Creating shared library: ${SOCKPP_SHARED_LIBRARY}")
120-
add_library(${SOCKPP_SHARED_LIBRARY} SHARED $<TARGET_OBJECTS:${SOCKPP_OBJECT_LIBRARY}>)
121-
122-
target_include_directories(${SOCKPP_SHARED_LIBRARY}
123-
PUBLIC
124-
$<BUILD_INTERFACE:${SOCKPP_INCLUDE_DIR}>
125-
$<INSTALL_INTERFACE:include>
126-
PRIVATE
127-
${SOCKPP_GENERATED_DIR}/include
128-
)
129-
130-
target_link_libraries(${SOCKPP_SHARED_LIBRARY} PUBLIC ${LIBS_SYSTEM})
131-
if(SOCKPP_WITH_OPENSSL)
132-
target_link_libraries(${SOCKPP_SHARED_LIBRARY} PUBLIC OpenSSL::SSL OpenSSL::Crypto)
133-
endif()
134-
135-
set_target_properties(${SOCKPP_SHARED_LIBRARY} PROPERTIES
136-
VERSION ${PROJECT_VERSION}
137-
SOVERSION ${PROJECT_VERSION_MAJOR}
138-
)
139-
140-
list(APPEND TARGET_FILES ${SOCKPP_SHARED_LIBRARY})
141-
142-
if(SOCKPP_WITH_OPENSSL)
143-
target_link_libraries(${SOCKPP_SHARED_LIBRARY}
144-
PUBLIC
145-
OpenSSL::SSL
146-
OpenSSL::Crypto
147-
)
148-
elseif(SOCKPP_WITH_MBEDTLS)
149-
target_link_libraries(${SOCKPP_SHARED_LIBRARY}
150-
PUBLIC
151-
MbedTLS::mbedtls
152-
MbedTLS::mbedcrypto
153-
MbedTLS::mbedx509
154-
)
155-
endif()
156-
endif()
157-
158-
if(${SOCKPP_BUILD_STATIC})
159-
message(STATUS "Creating static library: ${SOCKPP_STATIC_LIBRARY}")
160-
add_library(${SOCKPP_STATIC_LIBRARY} STATIC $<TARGET_OBJECTS:${SOCKPP_OBJECT_LIBRARY}>)
161-
162-
target_include_directories(${SOCKPP_STATIC_LIBRARY}
163-
PUBLIC
164-
$<BUILD_INTERFACE:${SOCKPP_INCLUDE_DIR}>
165-
$<INSTALL_INTERFACE:include>
166-
PRIVATE
167-
${SOCKPP_GENERATED_DIR}/include
168-
)
169-
170-
target_link_libraries(${SOCKPP_STATIC_LIBRARY} PUBLIC ${LIBS_SYSTEM})
171-
if(SOCKPP_WITH_OPENSSL)
172-
target_link_libraries(${SOCKPP_STATIC_LIBRARY} PUBLIC OpenSSL::SSL OpenSSL::Crypto)
173-
endif()
174-
175-
# On *nix systems, the static library can have the same base filename
176-
# as the shared library, thus 'libsockpp.a' for the static lib.
177-
# On Windows they need different names to tell the static lib from the
178-
# DLL import library.
179-
if(UNIX)
180-
set_target_properties(${SOCKPP_STATIC_LIBRARY} PROPERTIES
181-
OUTPUT_NAME ${SOCKPP_SHARED_LIBRARY}
182-
)
183-
endif()
184-
185-
list(APPEND TARGET_FILES ${SOCKPP_STATIC_LIBRARY})
186-
187-
if(SOCKPP_WITH_OPENSSL)
188-
target_link_libraries(${SOCKPP_STATIC_LIBRARY}
189-
PUBLIC
190-
OpenSSL::SSL
191-
OpenSSL::Crypto
192-
)
193-
elseif(SOCKPP_WITH_MBEDTLS)
194-
target_link_libraries(${SOCKPP_STATIC_LIBRARY} PUBLIC
195-
MbedTLS::mbedtls
196-
MbedTLS::mbedcrypto
197-
MbedTLS::mbedx509
198-
)
199-
endif()
200-
endif()
201-
202110
# --- Install Targets ---
203111

204112
include(GNUInstallDirs)
205113

206-
install(TARGETS ${TARGET_FILES}
207-
EXPORT sockpp-targets
114+
install(TARGETS ${SOCKPP_TARGETS}
115+
EXPORT Sockpp
208116
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
209117
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
210118
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
211119
)
212120

213-
install(EXPORT sockpp-targets
121+
install(EXPORT Sockpp
214122
FILE
215123
sockppTargets.cmake
216124
NAMESPACE
@@ -222,13 +130,17 @@ install(EXPORT sockpp-targets
222130
include(CMakePackageConfigHelpers)
223131

224132
write_basic_package_version_file(
225-
${SOCKPP_GENERATED_DIR}/cmake/sockppConfigVersion.cmake
226-
VERSION ${PROJECT_VERSION}
227-
COMPATIBILITY AnyNewerVersion
133+
${SOCKPP_GENERATED_DIR}/cmake/sockppConfigVersion.cmake
134+
VERSION ${PROJECT_VERSION}
135+
COMPATIBILITY AnyNewerVersion
228136
)
229137

230-
install(DIRECTORY include/ ${SOCKPP_GENERATED_DIR}/include/
231-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
138+
install(
139+
DIRECTORY
140+
include/
141+
${SOCKPP_GENERATED_DIR}/include/
142+
DESTINATION
143+
${CMAKE_INSTALL_INCLUDEDIR}
232144
)
233145

234146
install(
@@ -245,14 +157,6 @@ if(SOCKPP_BUILD_DOCUMENTATION)
245157
add_subdirectory(doc)
246158
endif()
247159

248-
# --- Default library for examples and unit tests ---
249-
250-
if(SOCKPP_BUILD_SHARED)
251-
set(SOCKPP_LIB ${SOCKPP_SHARED_LIBRARY})
252-
else()
253-
set(SOCKPP_LIB ${SOCKPP_STATIC_LIBRARY})
254-
endif()
255-
256160
# --- Example applications ---
257161

258162
if(SOCKPP_BUILD_EXAMPLES)

cmake/sockppConfig.cmake

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,29 @@
11
# sockppConfig.cmake
22
#
3-
# The following import targets may be created depending on configuration:
3+
# The following import target is always created:
44
#
55
# Sockpp::sockpp
6+
#
7+
# This is for whichever target is build (shared or static).
8+
# If both are built it is for the shared target.
9+
#
10+
# One or both of the following import targets will be created depending
11+
# on the configuration:
12+
#
13+
# Sockpp::sockpp-shared
614
# Sockpp::sockpp-static
715
#
816

917
include(CMakeFindDependencyMacro)
1018

11-
if(NOT TARGET Sockpp::sockpp AND NOT TARGET Sockpp::sockpp-static)
19+
if(NOT TARGET Sockpp::sockpp-shared AND NOT TARGET Sockpp::sockpp-static)
1220
include("${CMAKE_CURRENT_LIST_DIR}/sockppTargets.cmake")
21+
22+
if(TARGET Sockpp::sockpp-shared)
23+
add_library(Sockpp::sockpp ALIAS Sockpp::sockpp-shared)
24+
else()
25+
add_library(Sockpp::sockpp ALIAS Sockpp::sockpp-static)
26+
endif()
27+
1328
endif()
1429

examples/linux/CMakeLists.txt

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,8 @@ set(EXECUTABLES
4545
)
4646

4747
foreach(EXECUTABLE ${EXECUTABLES})
48-
add_executable(${EXECUTABLE} ${EXECUTABLE}.cpp)
49-
50-
target_include_directories(${EXECUTABLE}
51-
PUBLIC
52-
${SOCKPP_INCLUDE_DIR}
53-
PRIVATE
54-
${SOCKPP_GENERATED_DIR}/include
55-
)
56-
57-
target_link_libraries(${EXECUTABLE} ${SOCKPP_LIB})
48+
add_executable(${EXECUTABLE} ${EXECUTABLE}.cpp)
49+
target_link_libraries(${EXECUTABLE} Sockpp::sockpp)
5850
endforeach()
5951

6052
# --- Install examples ---

examples/tcp/CMakeLists.txt

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -45,29 +45,21 @@ find_package(Threads REQUIRED)
4545
# --- Executables ---
4646

4747
set(THREADED_EXECUTABLES
48-
tcpechosvr
49-
tcpechomt
50-
tcp6echosvr
48+
tcpechosvr
49+
tcpechomt
50+
tcp6echosvr
5151
)
5252

5353
set(EXECUTABLES
54-
tcpecho
55-
tcpechotest
56-
tcp6echo
57-
${THREADED_EXECUTABLES}
54+
tcpecho
55+
tcpechotest
56+
tcp6echo
57+
${THREADED_EXECUTABLES}
5858
)
5959

6060
foreach(EXECUTABLE ${EXECUTABLES})
61-
add_executable(${EXECUTABLE} ${EXECUTABLE}.cpp)
62-
63-
target_include_directories(${EXECUTABLE}
64-
PUBLIC
65-
${SOCKPP_INCLUDE_DIR}
66-
PRIVATE
67-
${SOCKPP_GENERATED_DIR}/include
68-
)
69-
70-
target_link_libraries(${EXECUTABLE} ${SOCKPP_LIB})
61+
add_executable(${EXECUTABLE} ${EXECUTABLE}.cpp)
62+
target_link_libraries(${EXECUTABLE} Sockpp::sockpp)
7163
endforeach()
7264

7365
# --- Additional linkage to Threads ---

examples/tls/CMakeLists.txt

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -48,28 +48,20 @@ set(THREADED_EXECUTABLES
4848
)
4949

5050
set(EXECUTABLES
51-
tlscli
52-
tlsconn
53-
${THREADED_EXECUTABLES}
51+
tlscli
52+
tlsconn
53+
${THREADED_EXECUTABLES}
5454
)
5555

5656
foreach(EXECUTABLE ${EXECUTABLES})
57-
add_executable(${EXECUTABLE} ${EXECUTABLE}.cpp)
58-
59-
target_include_directories(${EXECUTABLE}
60-
PUBLIC
61-
${SOCKPP_INCLUDE_DIR}
62-
PRIVATE
63-
${SOCKPP_GENERATED_DIR}/include
64-
)
65-
66-
target_link_libraries(${EXECUTABLE} ${SOCKPP_LIB})
57+
add_executable(${EXECUTABLE} ${EXECUTABLE}.cpp)
58+
target_link_libraries(${EXECUTABLE} Sockpp::sockpp)
6759
endforeach()
6860

6961
# --- Additional linkage to Threads ---
7062

7163
foreach(EXECUTABLE ${THREADED_EXECUTABLES})
72-
target_link_libraries(${EXECUTABLE} Threads::Threads)
64+
target_link_libraries(${EXECUTABLE} Threads::Threads)
7365
endforeach()
7466

7567
# --- Install examples ---

examples/udp/CMakeLists.txt

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -45,32 +45,24 @@ find_package(Threads REQUIRED)
4545
# --- Executables ---
4646

4747
set(THREADED_EXECUTABLES
48-
udpechosvr
48+
udpechosvr
4949
)
5050

5151
set(EXECUTABLES
52-
udpecho
53-
udp6echo
54-
${THREADED_EXECUTABLES}
52+
udpecho
53+
udp6echo
54+
${THREADED_EXECUTABLES}
5555
)
5656

5757
foreach(EXECUTABLE ${EXECUTABLES})
58-
add_executable(${EXECUTABLE} ${EXECUTABLE}.cpp)
59-
60-
target_include_directories(${EXECUTABLE}
61-
PUBLIC
62-
${SOCKPP_INCLUDE_DIR}
63-
PRIVATE
64-
${SOCKPP_GENERATED_DIR}/include
65-
)
66-
67-
target_link_libraries(${EXECUTABLE} ${SOCKPP_LIB})
58+
add_executable(${EXECUTABLE} ${EXECUTABLE}.cpp)
59+
target_link_libraries(${EXECUTABLE} Sockpp::sockpp)
6860
endforeach()
6961

7062
# --- Additional linkage to Threads ---
7163

7264
foreach(EXECUTABLE ${THREADED_EXECUTABLES})
73-
target_link_libraries(${EXECUTABLE} Threads::Threads)
65+
target_link_libraries(${EXECUTABLE} Threads::Threads)
7466
endforeach()
7567

7668
# --- Install examples ---

0 commit comments

Comments
 (0)