-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
117 lines (97 loc) · 3.6 KB
/
CMakeLists.txt
File metadata and controls
117 lines (97 loc) · 3.6 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
cmake_minimum_required(VERSION 3.16)
project(workflow_engine)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC OFF)
set(CMAKE_AUTOUIC OFF)
# 1. 平台通用的依赖查找 (Qt5)
find_package(Qt5 COMPONENTS Core Network Sql REQUIRED)
# 2. 平台特定的配置 (编译器参数, LDAP, QXmpp)
if(WIN32)
# --- Windows 环境 ---
# 设置源文件编码为 UTF-8 (解决 MSVC 中文乱码问题)
if(MSVC)
add_compile_options("/utf-8")
endif()
# LDAP: Windows 使用系统自带的 wldap32
set(LDAP_LIBRARIES wldap32)
# Windows QXmpp (本地 3rdparty)
set(QXMPP_INCLUDE_DIRS
"${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/include/qxmpp"
"${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/include/qxmpp/base"
"${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/include/qxmpp/client"
)
# Windows QXmpp 库文件
set(QXMPP_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/lib/qxmpp/QXmppQt5.Lib")
elseif (UNIX)
# --- FreeBSD / Unix 环境 ---
# LDAP: 查找 OpenLDAP 库 (ldap 和 lber)
find_path(LDAP_INCLUDE_DIR ldap.h)
find_library(LDAP_LIB NAMES ldap)
find_library(LBER_LIB NAMES lber)
if (LDAP_LIB AND LBER_LIB)
set(LDAP_LIBRARIES ${LDAP_LIB} ${LBER_LIB})
# 将找到的 LDAP 头文件路径暂存,后面统一添加
set(SYSTEM_LDAP_INCLUDE_DIR ${LDAP_INCLUDE_DIR})
else()
message(FATAL_ERROR "Could not find LDAP libraries (ldap, lber)")
endif()
# 查找 QXmpp (系统路径)
# 优先查找 /usr/local/include/qxmpp
find_path(QXMPP_INCLUDE_DIR QXmppClient.h
PATHS /usr/local/include/qxmpp
PATH_SUFFIXES qxmpp)
find_library(QXMPP_LIB NAMES qxmpp libqxmpp qxmpp-qt5
PATHS /usr/local/lib)
if (QXMPP_LIB)
set(QXMPP_LIBRARIES ${QXMPP_LIB})
# FreeBSD 下 QXmpp 头文件路径
set(QXMPP_INCLUDE_DIRS ${QXMPP_INCLUDE_DIR} "/usr/local/include/qxmpp")
else()
message(FATAL_ERROR "Could not find QXmpp library")
endif()
endif()
# 3. 定义可执行文件
set(SOURCE_FILES
src/main.cpp
src/bot.cpp
src/bot.h
src/processor.cpp
src/processor.h
src/utils/mysql_handler.cpp
src/utils/mysql_handler.h
src/utils/ldap_handler.cpp
src/utils/ldap_handler.h
)
add_executable(workflow_engine ${SOURCE_FILES})
# 4. 链接库与包含路径
# 配置头文件搜索路径 (PRIVATE 意味着只对当前目标有效)
target_include_directories(workflow_engine PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/include" # 允许 include <nlohmann/json.hpp>
${QXMPP_INCLUDE_DIRS} # QXmpp 路径 (Win/BSD 各自已定义)
${SYSTEM_LDAP_INCLUDE_DIR} # LDAP 路径 (BSD 需要, Win 为空)
)
# 链接库文件
target_link_libraries(workflow_engine PRIVATE
Qt5::Core
Qt5::Network
Qt5::Sql
${LDAP_LIBRARIES}
${QXMPP_LIBRARIES}
)
set(QXMPP_DEBUG_DLL "${PROJECT_SOURCE_DIR}/3rdparty/lib/qxmpp/QXmppQt5_debug.dll")
set(QXMPP_RELEASE_DLL "${PROJECT_SOURCE_DIR}/3rdparty/lib/qxmpp/QXmppQt5.dll")
# dll复制到exe所在目录
add_custom_command(
TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"$<IF:$<CONFIG:Debug>,${QXMPP_DEBUG_DLL},${QXMPP_RELEASE_DLL}>"
$<TARGET_FILE_DIR:${PROJECT_NAME}>/QXmppQt5.dll
)
# 复制config.ini到exe所在目录
add_custom_command(
TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${PROJECT_SOURCE_DIR}/src/config/config.ini"
$<TARGET_FILE_DIR:${PROJECT_NAME}>
)