-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
105 lines (92 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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
cmake_minimum_required(VERSION 3.10.2)
project(MemCache)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
option(MEMCACHE_IOS_STATIC "Build MemCache as a static library for iOS" OFF)
# Detect platform
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
set(IS_IOS TRUE)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Android")
set(IS_ANDROID TRUE)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set(IS_MACOS TRUE)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
set(IS_WINDOWS TRUE)
endif()
if(IS_ANDROID)
set(MEMCACHE_SOURCE_CODE
include/MemCache_C.h
include/MemCach_Cpp.hpp
include/optional.hpp
src/MemCache.cpp
src/MemCache.hpp
src/MemCache_C.cpp
src/sqlite3/sqlite3.c
src/sqlite3/sqlite3.h
src/main/java/cpp/MemCacheJni.cpp
src/MemCache_Cpp.cpp
src/Connect.hpp)
else()
set(MEMCACHE_SOURCE_CODE
include/MemCache_C.h
include/optional.hpp
include/MemCach_Cpp.hpp
src/MemCache.cpp
src/MemCache.hpp
src/MemCache_C.cpp
src/sqlite3/sqlite3.c
src/sqlite3/sqlite3.h
src/MemCache_Cpp.cpp
src/Connect.hpp)
endif()
if(IS_IOS)
if(MEMCACHE_IOS_STATIC)
add_library(MemCache STATIC ${MEMCACHE_SOURCE_CODE})
else()
add_library(MemCache SHARED ${MEMCACHE_SOURCE_CODE})
set_target_properties(MemCache PROPERTIES
XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "${MEMCACHE_DEVELOPMENT_TEAM}"
)
endif()
elseif(IS_ANDROID)
find_library(log-lib log)
add_library(MemCache SHARED ${MEMCACHE_SOURCE_CODE})
elseif(IS_MACOS OR IS_WINDOWS)
add_library(MemCache SHARED ${MEMCACHE_SOURCE_CODE})
else()
message(FATAL_ERROR "Unsupported platform")
endif()
# Add include directory for MemCache library
target_include_directories(MemCache PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE src src/sqlite3
)
if(IS_ANDROID)
target_link_libraries(MemCache ${log-lib})
else()
target_link_libraries(MemCache)
endif()
# Add compile options
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
target_compile_options(MemCache PRIVATE -Wall -Wextra -Wpedantic)
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
target_compile_options(MemCache PRIVATE /W4 /WX)
endif()
if(NOT CMAKE_SYSTEM_NAME STREQUAL "iOS" AND NOT CMAKE_SYSTEM_NAME STREQUAL "Android")
# Add example
add_executable(memory_cache_example example.cpp)
target_link_libraries(memory_cache_example PRIVATE MemCache)
# Add tests
include(FetchContent)
FetchContent_Declare(
Catch2
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
GIT_TAG v2.13.7 # 或任何您需要的版本标签
)
FetchContent_MakeAvailable(Catch2)
add_executable(tests
tests/test_mem_cache.cpp
tests/test_main.cpp)
target_link_libraries(tests MemCache Catch2::Catch2)
endif()