This repository has been archived by the owner on Dec 31, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 27
/
CMakeLists.txt
61 lines (52 loc) · 2.51 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
cmake_minimum_required(VERSION 3.9)
project(cqcppsdk)
option(CQ_BUILD_TESTS "Build CQCPPSDK tests" OFF)
message(STATUS "build cqcppsdk tests: ${CQ_BUILD_TESTS}")
if (WIN32)
add_definitions(-DWIN32) # 确保 Win32 环境下存在 WIN32 定义
endif ()
# 检查是否支持构建 std 模式
if (WIN32 AND (MSVC OR MSYS OR MINGW) AND (CMAKE_SIZEOF_VOID_P EQUAL 4))
set(CQ_CAN_BUILD_STD_MODE YES)
else ()
set(CQ_CAN_BUILD_STD_MODE NO)
endif ()
message(STATUS "can build std mode: ${CQ_CAN_BUILD_STD_MODE}")
# 获取 SDK 所在目录
set(_CQCPPSDK_DIR ${CMAKE_CURRENT_LIST_DIR})
message(STATUS "cqcppsdk dir: ${_CQCPPSDK_DIR}")
# 递归搜索 core 和 utils 中的源文件
file(GLOB_RECURSE _CQCPPSDK_SOURCE_FILES ${_CQCPPSDK_DIR}/src/core/*.cpp ${_CQCPPSDK_DIR}/src/utils/*.cpp)
# 添加 SDK 核心部分
add_library(cqcppsdk INTERFACE)
target_sources(cqcppsdk INTERFACE ${_CQCPPSDK_SOURCE_FILES})
target_include_directories(cqcppsdk INTERFACE ${_CQCPPSDK_DIR}/include)
target_compile_options(cqcppsdk INTERFACE $<$<CXX_COMPILER_ID:MSVC>:/utf-8>)
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0)
# 在 GCC 8.x 环境下使用 std::filesystem 需要链接 stdc++fs
target_link_libraries(cqcppsdk INTERFACE stdc++fs)
endif ()
if (CQ_CAN_BUILD_STD_MODE)
# 添加 std 模式
add_library(cqcppsdk_std_mode INTERFACE)
file(GLOB_RECURSE _CQCPPSDK_STD_MODE_SOURCE_FILES ${_CQCPPSDK_DIR}/src/std_mode/*.cpp)
target_sources(cqcppsdk_std_mode INTERFACE ${_CQCPPSDK_STD_MODE_SOURCE_FILES} ${_CQCPPSDK_DIR}/src/api_test.cpp)
target_compile_definitions(cqcppsdk_std_mode INTERFACE -D_CQ_STD_MODE)
target_link_libraries(cqcppsdk_std_mode INTERFACE cqcppsdk)
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_link_options(cqcppsdk_std_mode INTERFACE -static -Wl,--kill-at,--enable-stdcall-fixup)
endif ()
endif ()
# 添加 dev 模式
add_library(cqcppsdk_dev_mode INTERFACE)
file(GLOB_RECURSE _CQCPPSDK_DEV_MODE_SOURCE_FILES ${_CQCPPSDK_DIR}/src/dev_mode/*.cpp)
target_sources(cqcppsdk_dev_mode INTERFACE ${_CQCPPSDK_DEV_MODE_SOURCE_FILES} ${_CQCPPSDK_DIR}/src/api_test.cpp)
target_compile_definitions(cqcppsdk_dev_mode INTERFACE -D_CQ_DEV_MODE)
target_link_libraries(cqcppsdk_dev_mode INTERFACE cqcppsdk)
if (CQ_BUILD_TESTS)
# 添加 test 模式
add_library(cqcppsdk_test_mode INTERFACE)
target_compile_definitions(cqcppsdk_test_mode INTERFACE -D_CQ_TEST_MODE)
target_link_libraries(cqcppsdk_test_mode INTERFACE cqcppsdk)
add_subdirectory(tests)
endif ()