mirror of
https://github.com/ChuXunYu/OnlineRpg.git
synced 2026-01-31 07:01:26 +00:00
2
This commit is contained in:
128
CMakeLists.txt
Normal file
128
CMakeLists.txt
Normal file
@@ -0,0 +1,128 @@
|
||||
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 "========================================")
|
||||
Reference in New Issue
Block a user