-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
90 lines (71 loc) · 3.07 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
cmake_minimum_required(VERSION 3.28.0)
project(
template-cpp
VERSION 0.1.0
DESCRIPTION "A template for C++ projects"
HOMEPAGE_URL "https://github.com/globberwops/template-cpp"
LANGUAGES CXX)
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
include(ProjectName)
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
option(${PROJECT_NAME_UPPER}_ENABLE_DOCS "Enable Docs" ${PROJECT_IS_TOP_LEVEL})
option(${PROJECT_NAME_UPPER}_ENABLE_INSTALL "Enable Install" ${PROJECT_IS_TOP_LEVEL})
option(${PROJECT_NAME_UPPER}_ENABLE_TESTING "Enable Testing" ${PROJECT_IS_TOP_LEVEL})
option(${PROJECT_NAME_UPPER}_USE_CCACHE "Use ccache" ${PROJECT_IS_TOP_LEVEL})
option(${PROJECT_NAME_UPPER}_USE_CLANG_TIDY "Use clang-tidy" ${PROJECT_IS_TOP_LEVEL})
option(${PROJECT_NAME_UPPER}_USE_CPPCHECK "Use cppcheck" ${PROJECT_IS_TOP_LEVEL})
option(${PROJECT_NAME_UPPER}_USE_IPO "Use interprocedural optimization" ${PROJECT_IS_TOP_LEVEL})
option(${PROJECT_NAME_UPPER}_USE_SANITIZERS "Use sanitizers" ${PROJECT_IS_TOP_LEVEL})
include(CompilerWarnings)
include(InstallDirectories)
include(OutputDirectories)
include(UseCcache)
include(UseClangTidy)
include(UseCppCheck)
include(UseIPO)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_VERIFY_INTERFACE_HEADER_SETS ON)
add_subdirectory(external SYSTEM)
add_subdirectory(src)
if(${PROJECT_NAME_UPPER}_ENABLE_BENCHMARK)
add_subdirectory(benchmark)
endif()
if(${PROJECT_NAME_UPPER}_ENABLE_DOCS)
add_subdirectory(docs)
endif()
if(${PROJECT_NAME_UPPER}_ENABLE_INSTALL)
include(CMakePackageConfigHelpers)
include(GetAllTargets)
get_all_targets(${PROJECT_NAME_UPPER}_TARGETS src)
message(STATUS "Targets: ${${PROJECT_NAME_UPPER}_TARGETS}")
install(
TARGETS ${${PROJECT_NAME_UPPER}_TARGETS}
EXPORT ${PROJECT_NAME_LOWER}-targets
LIBRARY DESTINATION ${${PROJECT_NAME_UPPER}_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${${PROJECT_NAME_UPPER}_INSTALL_LIBDIR}
RUNTIME DESTINATION ${${PROJECT_NAME_UPPER}_INSTALL_BINDIR}
INCLUDES
DESTINATION ${${PROJECT_NAME_UPPER}_INSTALL_INCLUDEDIR})
install(
EXPORT ${PROJECT_NAME_LOWER}-targets
FILE ${PROJECT_NAME_LOWER}-targets.cmake
NAMESPACE ${PROJECT_NAME_LOWER}::
DESTINATION ${${PROJECT_NAME_UPPER}_INSTALL_CONFIG_DIR})
configure_package_config_file(
cmake/package-config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME_LOWER}-config.cmake
INSTALL_DESTINATION ${${PROJECT_NAME_UPPER}_INSTALL_CONFIG_DIR})
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME_LOWER}-config-version.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME_LOWER}-config.cmake
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME_LOWER}-config-version.cmake
DESTINATION ${${PROJECT_NAME_UPPER}_INSTALL_CONFIG_DIR})
install(DIRECTORY include/${PROJECT_NAME_LOWER} DESTINATION ${${PROJECT_NAME_UPPER}_INSTALL_INCLUDEDIR})
endif()
if(${PROJECT_NAME_UPPER}_ENABLE_TESTING)
enable_testing()
add_subdirectory(tests)
endif()