From b4551b462b82a3f8f8fd0603071c08cc290e89c2 Mon Sep 17 00:00:00 2001 From: zhenyan121 <3367366583@qq.com> Date: Sun, 7 Dec 2025 15:51:19 +0800 Subject: [PATCH] using FetchContent to control lib --- CMakeLists.txt | 53 +++++++++++++++++++++++++++----------------- README.md | 2 +- cmake/SDL.cmake | 27 ++++++++++++++++++++++ third_party/SDL3 | 1 - third_party/freetype | 1 - 5 files changed, 61 insertions(+), 23 deletions(-) create mode 100644 cmake/SDL.cmake delete mode 160000 third_party/SDL3 delete mode 160000 third_party/freetype diff --git a/CMakeLists.txt b/CMakeLists.txt index 1506115..ec0276d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,16 +1,22 @@ -cmake_minimum_required(VERSION 3.16) -project(SporeBG-Conid) +cmake_minimum_required(VERSION 3.20) +project(SporeBG-Conid LANGUAGES C CXX) -# 设置C++标准 +# C++ 标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -# 设置输出目录 +# 输出目录 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/$") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/$") -# 包含SDL3子项目 -add_subdirectory(third_party/SDL3) +# ========== 引入 SDL 构建脚本 ========== +include(${CMAKE_SOURCE_DIR}/cmake/SDL.cmake) + +# ========== 源码 ========== +#file(GLOB_RECURSE SOURCE_FILES +# src/*.cpp +# src/*.h +#) set(SOURCE_FILES src/main.cpp @@ -26,24 +32,31 @@ set(SOURCE_FILES src/scenes/gameplay/GameScene.cpp src/graphics/GameRenderer.cpp src/graphics/CoordinateConverter.cpp - + src/utils/CoordinateTools.cpp ) -# 添加可执行文件 + add_executable(${PROJECT_NAME} ${SOURCE_FILES}) -target_include_directories(SporeBG-Conid PRIVATE - ${CMAKE_SOURCE_DIR}/src) -# 使用正确的目标名称链接SDL3 -# 方法1:使用别名(推荐) -target_link_libraries(SporeBG-Conid PRIVATE SDL3::SDL3) +target_include_directories(${PROJECT_NAME} + PRIVATE ${CMAKE_SOURCE_DIR}/src +) -# Windows下复制动态库 - 使用正确的目标名称 -if(WIN32) - add_custom_command(TARGET SporeBG-Conid POST_BUILD +target_link_libraries(${PROJECT_NAME} + PRIVATE + SDL3::SDL3 + SDL3_ttf::SDL3_ttf +) + +# ========== Windows: 复制 DLL ========== +if (WIN32) + add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different - $ - $ - COMMENT "Copying SDL3 DLL to output directory" + $ + $ + COMMAND ${CMAKE_COMMAND} -E copy_if_different + $ + $ + COMMENT "Copying SDL3 runtime DLLs" ) -endif() \ No newline at end of file +endif() diff --git a/README.md b/README.md index 275463f..43a301f 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ## 构建指南 确保电脑安装了`cmake`和`ninja`,使用`gcc`与`g++`: ```bash -git clone --recursive https://github.com/zhenyan121/SporeBG-Conid.git +git clone https://github.com/zhenyan121/SporeBG-Conid.git mkdir build cd build cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ .. diff --git a/cmake/SDL.cmake b/cmake/SDL.cmake new file mode 100644 index 0000000..2102187 --- /dev/null +++ b/cmake/SDL.cmake @@ -0,0 +1,27 @@ +include(FetchContent) + +# =========================== +# SDL3 +# =========================== +FetchContent_Declare( + SDL3 + GIT_REPOSITORY https://github.com/libsdl-org/SDL.git + GIT_TAG release-3.2.4 +) + +FetchContent_MakeAvailable(SDL3) + +# =========================== +# SDL3_ttf(使用内置 FreeType + Harfbuzz) +# =========================== +set(SDLTTF_VENDORED ON CACHE BOOL "" FORCE) +set(SDLTTF_HARFBUZZ OFF CACHE BOOL "" FORCE) +set(SDLTTF_PLUTOSVG OFF CACHE BOOL "" FORCE) + +FetchContent_Declare( + SDL3_ttf + GIT_REPOSITORY https://github.com/libsdl-org/SDL_ttf.git + GIT_TAG release-3.2.2 # ← 正确的版本 +) + +FetchContent_MakeAvailable(SDL3_ttf) diff --git a/third_party/SDL3 b/third_party/SDL3 deleted file mode 160000 index 61bf708..0000000 --- a/third_party/SDL3 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 61bf7087f5ad4f1fdd418e58adc023fd8252e678 diff --git a/third_party/freetype b/third_party/freetype deleted file mode 160000 index 526ec5c..0000000 --- a/third_party/freetype +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 526ec5c47b9ebccc4754c85ac0c0cdf7c85a5e9b