-
Notifications
You must be signed in to change notification settings - Fork 3
/
CMakeLists.txt
140 lines (115 loc) · 4.37 KB
/
CMakeLists.txt
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
###################################################################################################
##
## Информация о проекте
##
###################################################################################################
cmake_minimum_required(VERSION 3.8.2)
project(Burst VERSION 3.1.1 LANGUAGES CXX)
get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY)
###################################################################################################
##
## Опции проекта
##
###################################################################################################
option(BURST_COVERAGE "Включить измерение покрытия кода тестами" OFF)
option(BURST_TESTING "Включить модульное тестирование" ON)
option(BURST_BENCHMARKING "Включить сборку программ для замеров производительности" ON)
###################################################################################################
##
## Опции компиляции
##
###################################################################################################
add_compile_options(
-Werror
-pedantic-errors
-Wall
-Wextra
-Wpedantic
-Wcast-align
-Wcast-qual
-Wconversion
-Wctor-dtor-privacy
-Wfloat-equal
-Wnon-virtual-dtor
-Wold-style-cast
-Woverloaded-virtual
-Wredundant-decls
-Wsign-conversion
-Wsign-promo
)
if(NOT CMAKE_CXX_EXTENSIONS)
set(CMAKE_CXX_EXTENSIONS OFF)
endif()
if(NOT CMAKE_BUILD_TYPE)
message(WARNING "Тип сборки не выбран (см. опцию CMAKE_BUILD_TYPE).")
else()
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
endif()
###################################################################################################
##
## Основная цель
##
###################################################################################################
add_library(burst INTERFACE)
target_include_directories(burst INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
target_compile_features(burst INTERFACE cxx_std_14)
add_library(Burst::burst ALIAS burst)
###################################################################################################
##
## Установка
##
###################################################################################################
install(DIRECTORY include/burst DESTINATION include)
install(TARGETS burst EXPORT BurstConfig)
install(EXPORT BurstConfig NAMESPACE Burst:: DESTINATION share/Burst/cmake)
include(CMakePackageConfigHelpers)
write_basic_package_version_file("${PROJECT_BINARY_DIR}/BurstConfigVersion.cmake"
VERSION
${PROJECT_VERSION}
COMPATIBILITY
AnyNewerVersion
)
install(FILES "${PROJECT_BINARY_DIR}/BurstConfigVersion.cmake" DESTINATION share/Burst/cmake)
###################################################################################################
##
## Тесты
##
###################################################################################################
if(NOT BURST_TESTING)
message(STATUS "Testing is disabled for Burst")
elseif(IS_SUBPROJECT)
message(STATUS "Burst is not tested being a subproject")
else()
add_subdirectory(test)
endif()
###################################################################################################
##
## Измерения
##
###################################################################################################
if(NOT BURST_BENCHMARKING)
message(STATUS "Benchmarking is disabled for Burst")
elseif(IS_SUBPROJECT)
message(STATUS "Burst is not benchmarked being a subproject")
else()
add_subdirectory(benchmark)
endif()
###################################################################################################
##
## Документация
##
###################################################################################################
if(NOT IS_SUBPROJECT)
add_subdirectory(doc)
endif()
###################################################################################################
##
## Онлайн-версия
##
###################################################################################################
if(NOT IS_SUBPROJECT)
add_subdirectory(online)
endif()