-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
137 lines (114 loc) · 4.13 KB
/
CMakeLists.txt
File metadata and controls
137 lines (114 loc) · 4.13 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
cmake_minimum_required(VERSION 3.16)
project(cansocket VERSION 1.0.0 LANGUAGES CXX)
# Force Clang compiler
set(CMAKE_C_COMPILER /usr/bin/clang)
set(CMAKE_CXX_COMPILER /usr/bin/clang++)
# Ensure we're using libc++ with Clang
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -stdlib=libc++")
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Include Conan-generated toolchain first
#include(${CMAKE_BINARY_DIR}/build/${CMAKE_BUILD_TYPE}/generators/conan_toolchain.cmake)
include(build/build/${CMAKE_BUILD_TYPE}/generators/conan_toolchain.cmake)
# Add Conan-generated CMake files to the prefix path
list(APPEND CMAKE_PREFIX_PATH "${CMAKE_BINARY_DIR}/build/${CMAKE_BUILD_TYPE}/generators")
set(Catch2_DIR "${CMAKE_BINARY_DIR}/build/${CMAKE_BUILD_TYPE}/generators")
set(fmt_DIR "${CMAKE_BINARY_DIR}/build/${CMAKE_BUILD_TYPE}/generators")
find_package(Catch2 CONFIG REQUIRED)
find_package(fmt CONFIG REQUIRED)
message(STATUS "Catch2 include dirs: ${Catch2_INCLUDE_DIRS}")
message(STATUS "fmt include dirs: ${fmt_INCLUDE_DIRS}")
# Add compile options
add_compile_options(-Wall -Wextra -Wpedantic)
# Define the library target
add_library(cansocket INTERFACE)
target_include_directories(cansocket INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>
)
target_link_libraries(cansocket INTERFACE fmt::fmt)
# Enable testing and add tests subdirectory
enable_testing()
add_subdirectory(tests)
# Add examples subdirectory (optional)
option(BUILD_EXAMPLES "Build example programs" ON)
if(BUILD_EXAMPLES)
add_subdirectory(examples)
endif()
# Add tools subdirectory (optional)
option(BUILD_TOOLS "Build CAN tools (cansend, candump)" ON)
if(BUILD_TOOLS)
add_subdirectory(tools)
endif()
# Package information
set(CANSOCKET_VERSION_MAJOR 1)
set(CANSOCKET_VERSION_MINOR 0)
set(CANSOCKET_VERSION_PATCH 0)
set(CANSOCKET_VERSION "${CANSOCKET_VERSION_MAJOR}.${CANSOCKET_VERSION_MINOR}.${CANSOCKET_VERSION_PATCH}")
# Configure version header
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cansocket_version.hpp.in"
"${CMAKE_CURRENT_BINARY_DIR}/cansocket_version.hpp"
@ONLY
)
# Installation rules
install(FILES
cansocket.hpp
"${CMAKE_CURRENT_BINARY_DIR}/cansocket_version.hpp"
DESTINATION include/cansocket
)
install(FILES
API_REFERENCE.md
README.md
LICENSE-2.0.txt
DESTINATION share/doc/cansocket
)
# Export the target
install(TARGETS cansocket
EXPORT cansocketTargets
INCLUDES DESTINATION include/cansocket
)
# Create and install the package config files
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/cansocketConfigVersion.cmake"
VERSION ${CANSOCKET_VERSION}
COMPATIBILITY AnyNewerVersion
)
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cansocketConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cansocketConfig.cmake"
INSTALL_DESTINATION lib/cmake/cansocket
)
install(EXPORT cansocketTargets
FILE cansocketTargets.cmake
NAMESPACE cansocket::
DESTINATION lib/cmake/cansocket
)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/cansocketConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/cansocketConfigVersion.cmake"
DESTINATION lib/cmake/cansocket
)
# CPack configuration for creating packages
set(CPACK_PACKAGE_NAME "cansocket")
set(CPACK_PACKAGE_VERSION ${CANSOCKET_VERSION})
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Modern C++17 header-only library for CAN communication")
set(CPACK_PACKAGE_DESCRIPTION "CANSocket is a modern C++17 header-only library for CAN (Controller Area Network) and CAN FD communication on Linux systems.")
set(CPACK_PACKAGE_VENDOR "CANSocket Project")
set(CPACK_PACKAGE_CONTACT "noreply@example.com")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE-2.0.txt")
set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
set(CPACK_SOURCE_GENERATOR "TGZ;ZIP")
set(CPACK_SOURCE_IGNORE_FILES
/.git/
/build/
/cmake-build-debug/
/.idea/
/.conan-profile-*
/\\..*
)
include(CPack)