mirror of
https://github.com/ChuXunYu/OnlineRpg.git
synced 2026-01-30 23:41:26 +00:00
129 lines
3.7 KiB
CMake
129 lines
3.7 KiB
CMake
cmake_minimum_required(VERSION 3.15)
|
||
project(OnlineRpg VERSION 1.0.0 LANGUAGES C CXX)
|
||
|
||
# 设置C++标准
|
||
set(CMAKE_CXX_STANDARD 17)
|
||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||
|
||
# 设置输出目录
|
||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||
|
||
# 包含目录
|
||
include_directories(
|
||
${PROJECT_SOURCE_DIR}/include
|
||
${PROJECT_SOURCE_DIR}/include/core
|
||
${PROJECT_SOURCE_DIR}/include/common
|
||
${PROJECT_SOURCE_DIR}/include/server
|
||
${PROJECT_SOURCE_DIR}/include/client
|
||
)
|
||
|
||
# 平台特定设置
|
||
if(WIN32)
|
||
# Windows 平台
|
||
add_definitions(-D_WIN32_WINNT=0x0601) # Windows 7+
|
||
set(PLATFORM_LIBS ws2_32)
|
||
message(STATUS "Building for Windows")
|
||
else()
|
||
# Linux/Unix 平台
|
||
set(PLATFORM_LIBS pthread)
|
||
message(STATUS "Building for Unix/Linux")
|
||
endif()
|
||
|
||
# SQLite3 设置
|
||
# 如果系统没有安装SQLite3,可以使用amalgamation版本
|
||
find_package(SQLite3)
|
||
if(SQLite3_FOUND)
|
||
message(STATUS "Found SQLite3: ${SQLite3_INCLUDE_DIRS}")
|
||
include_directories(${SQLite3_INCLUDE_DIRS})
|
||
set(SQLITE_LIBS ${SQLite3_LIBRARIES})
|
||
set(SQLITE_SRC "")
|
||
else()
|
||
message(STATUS "SQLite3 not found, using amalgamation")
|
||
# 使用amalgamation版本
|
||
include_directories(${PROJECT_SOURCE_DIR}/lib)
|
||
set(SQLITE_LIBS "")
|
||
# 将sqlite3.c添加到源文件列表
|
||
set(SQLITE_SRC ${PROJECT_SOURCE_DIR}/lib/sqlite3.c)
|
||
message(STATUS "Using SQLite amalgamation: ${SQLITE_SRC}")
|
||
endif()
|
||
|
||
# 核心库 (Core: 多态、模板+链表)
|
||
# 注意: HistoryLog.h 是纯模板类,不需要.cpp文件
|
||
set(CORE_SOURCES
|
||
src/core/ICharacter.cpp
|
||
src/core/ISkill.cpp
|
||
src/core/Warrior.cpp
|
||
src/core/Mage.cpp
|
||
src/core/Skills.cpp
|
||
)
|
||
|
||
# 通用库 (Common: 网络封装、协议)
|
||
set(COMMON_SOURCES
|
||
src/common/SocketWrapper.cpp
|
||
src/common/Protocol.cpp
|
||
src/common/Database.cpp
|
||
${SQLITE_SRC}
|
||
)
|
||
|
||
# 服务器源文件
|
||
set(SERVER_SOURCES
|
||
src/server/GameServer.cpp
|
||
src/server/ClientHandler.cpp
|
||
src/server/GameLobby.cpp
|
||
src/server/BattleRoom.cpp
|
||
src/server/BattleRoomManager.cpp
|
||
src/server/ServerMain.cpp
|
||
)
|
||
|
||
# 客户端源文件
|
||
set(CLIENT_SOURCES
|
||
src/client/GameClient.cpp
|
||
src/client/ClientMain.cpp
|
||
)
|
||
|
||
# 构建核心库
|
||
add_library(core STATIC ${CORE_SOURCES})
|
||
|
||
# 构建通用库
|
||
add_library(common STATIC ${COMMON_SOURCES})
|
||
target_link_libraries(common ${SQLITE_LIBS} ${PLATFORM_LIBS})
|
||
|
||
# 构建服务器可执行文件
|
||
add_executable(server ${SERVER_SOURCES})
|
||
target_link_libraries(server core common ${SQLITE_LIBS} ${PLATFORM_LIBS})
|
||
|
||
# 构建客户端可执行文件
|
||
add_executable(client ${CLIENT_SOURCES})
|
||
target_link_libraries(client core common ${PLATFORM_LIBS})
|
||
|
||
# 编译选项
|
||
if(MSVC)
|
||
# Visual Studio 编译器选项
|
||
target_compile_options(core PRIVATE /W4)
|
||
target_compile_options(common PRIVATE /W4)
|
||
target_compile_options(server PRIVATE /W4)
|
||
target_compile_options(client PRIVATE /W4)
|
||
else()
|
||
# GCC/Clang 编译器选项
|
||
target_compile_options(core PRIVATE -Wall -Wextra -Wpedantic)
|
||
target_compile_options(common PRIVATE -Wall -Wextra -Wpedantic)
|
||
target_compile_options(server PRIVATE -Wall -Wextra -Wpedantic)
|
||
target_compile_options(client PRIVATE -Wall -Wextra -Wpedantic)
|
||
endif()
|
||
|
||
# 安装规则
|
||
install(TARGETS server client
|
||
RUNTIME DESTINATION bin
|
||
)
|
||
|
||
# 打印构建信息
|
||
message(STATUS "========================================")
|
||
message(STATUS "Project: ${PROJECT_NAME}")
|
||
message(STATUS "Version: ${PROJECT_VERSION}")
|
||
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
||
message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
|
||
message(STATUS "========================================")
|