-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
102 lines (85 loc) · 2.82 KB
/
CMakeLists.txt
File metadata and controls
102 lines (85 loc) · 2.82 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
cmake_minimum_required(VERSION 3.14)
project(slick-shm
VERSION 0.1.4
LANGUAGES CXX
DESCRIPTION "C++ header-only cross-platform shared memory library"
)
# Options
option(SLICK_SHM_BUILD_EXAMPLES "Build example programs" ON)
option(SLICK_SHM_BUILD_TESTS "Build unit tests" ON)
option(SLICK_SHM_INSTALL "Generate install target" ON)
# Interface library (header-only)
add_library(slick-shm INTERFACE)
add_library(slick::shm ALIAS slick-shm)
# For backward compatibility with older versions
add_library(slick_shm ALIAS slick-shm)
target_include_directories(slick-shm INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
target_compile_features(slick-shm INTERFACE cxx_std_17)
set_target_properties(slick-shm PROPERTIES EXPORT_NAME shm)
# Platform-specific linking
if(APPLE)
# macOS doesn't need rt library (shm_open/shm_unlink are in libc)
# pthread may be needed for some implementations
find_package(Threads)
if(Threads_FOUND)
target_link_libraries(slick-shm INTERFACE Threads::Threads)
endif()
elseif(UNIX)
# Linux needs rt (realtime) for shm_open/shm_unlink
target_link_libraries(slick-shm INTERFACE rt)
# pthread may be needed for some implementations
find_package(Threads)
if(Threads_FOUND)
target_link_libraries(slick-shm INTERFACE Threads::Threads)
endif()
endif()
# Examples
if(SLICK_SHM_BUILD_EXAMPLES)
add_subdirectory(examples)
endif()
# Tests
if(SLICK_SHM_BUILD_TESTS)
enable_testing()
add_subdirectory(tests)
endif()
# Install
if(SLICK_SHM_INSTALL)
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
# Install headers
install(DIRECTORY include/slick
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
# Install targets
install(TARGETS slick-shm
EXPORT slick-shm-targets
)
# Install export set
install(EXPORT slick-shm-targets
FILE slick-shm-targets.cmake
NAMESPACE slick::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/slick-shm
)
# Generate and install package config file
configure_package_config_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/slick-shm-config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/slick-shm-config.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/slick-shm
)
# Generate and install package version file
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/slick-shm-config-version.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)
# Install config files
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/slick-shm-config.cmake
${CMAKE_CURRENT_BINARY_DIR}/slick-shm-config-version.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/slick-shm
)
endif()
message(STATUS "${PROJECT_NAME}: ${PROJECT_VERSION}")