-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
158 lines (119 loc) · 3.86 KB
/
CMakeLists.txt
File metadata and controls
158 lines (119 loc) · 3.86 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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# ============================================
# 项目主配置文件
# ============================================
cmake_minimum_required(VERSION 3.13.0)
project(TinyFarm VERSION 0.1.0 LANGUAGES C CXX)
# ============================================
# 基础配置
# ============================================
# 指定搜索路径(用于find_package在编译期查找库)
set(CMAKE_PREFIX_PATH ${CMAKE_SOURCE_DIR}/prebuilt)
list(APPEND CMAKE_PREFIX_PATH $ENV{HOME}/.local)
# 指定目标名称
set(TARGET ${PROJECT_NAME}-${CMAKE_SYSTEM_NAME})
# 依赖库默认链接类型:ON = 动态链接(.dll/.so/.dylib),OFF = 静态链接(.lib/.a)
# 注意:可以在Dependencies.cmake中为每个库单独指定
option(BUILD_SHARED_LIBS "依赖库默认编译为动态库" OFF)
option(ENABLE_DEBUG_UI "启用 ImGui 调试面板" ON)
# ============================================
# 引入模块化配置
# ============================================
# 编译器设置(C++标准、编译选项等)
include(cmake/CompilerSettings.cmake)
# 运行时路径配置(RPATH)
include(cmake/RuntimePath.cmake)
# 依赖管理
include(cmake/Dependencies.cmake)
# ImGui配置
include(cmake/ImGui.cmake)
# OpenGL配置
include(cmake/OpenGL.cmake)
# 构建辅助函数
include(cmake/BuildHelpers.cmake)
# 项目信息打印
include(cmake/ProjectInfo.cmake)
# 测试框架
include(CTest)
# ============================================
# 设置项目依赖
# ============================================
# 调用依赖配置函数(定义在Dependencies.cmake中)
setup_project_dependencies()
# ============================================
# 构建目标
# ============================================
# 创建 Engine 静态库
add_library(engine STATIC ${IMGUI_SOURCES})
if(ENABLE_DEBUG_UI)
target_compile_definitions(engine PUBLIC TF_ENABLE_DEBUG_UI)
endif()
# 链接所有依赖库
target_link_libraries(engine
PUBLIC
SDL3::SDL3
glm::glm
nlohmann_json::nlohmann_json
spdlog::spdlog
EnTT::EnTT
OpenGL::GL
glad
Freetype::Freetype
HarfBuzz::HarfBuzz
)
target_include_directories(engine
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR}/external/stb
${CMAKE_CURRENT_SOURCE_DIR}/external/miniaudio
)
# 创建 Game 静态库
add_library(game STATIC)
target_link_libraries(game
PUBLIC
engine
)
# 创建可执行文件
add_executable(${TARGET})
target_link_libraries(${TARGET}
PRIVATE
game
)
target_include_directories(${TARGET}
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
)
# 源文件填充(定义在 src/CMakeLists.txt 中)
add_subdirectory(src)
# ============================================
# 应用配置
# ============================================
# 设置编译选项(定义在CompilerSettings.cmake中)
setup_compiler_options(engine)
setup_compiler_options(game)
setup_compiler_options(${TARGET})
# 配置资源文件复制(定义在BuildHelpers.cmake中)
setup_asset_copy(${TARGET})
# 配置配置文件复制(定义在BuildHelpers.cmake中)
setup_config_copy(${TARGET})
# 配置Windows DLL复制(定义在BuildHelpers.cmake中)
setup_windows_dll_copy(${TARGET})
# ============================================
# 工具配置
# ============================================
option(BUILD_TOOLS "是否构建工具" ON)
if(BUILD_TOOLS AND ENABLE_DEBUG_UI)
add_subdirectory(tools)
endif()
# ============================================
# 测试配置
# ============================================
option(BUILD_TESTING "是否构建测试" ON)
if(BUILD_TESTING)
enable_testing()
add_subdirectory(tests)
endif()
# ============================================
# 打印配置信息
# ============================================
# 打印项目配置完成信息(定义在ProjectInfo.cmake中)
print_project_info(${TARGET})