using FetchContent to control lib

This commit is contained in:
2025-12-07 15:51:19 +08:00
parent 77adfc55d4
commit b4551b462b
5 changed files with 61 additions and 23 deletions

View File

@@ -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}/$<CONFIGURATION>")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/$<CONFIGURATION>")
# 包含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
$<TARGET_FILE:SDL3::SDL3>
$<TARGET_FILE_DIR:SporeBG-Conid>
COMMENT "Copying SDL3 DLL to output directory"
$<TARGET_FILE:SDL3::SDL3>
$<TARGET_FILE_DIR:${PROJECT_NAME}>
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:SDL3_ttf::SDL3_ttf>
$<TARGET_FILE_DIR:${PROJECT_NAME}>
COMMENT "Copying SDL3 runtime DLLs"
)
endif()
endif()

View File

@@ -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++ ..

27
cmake/SDL.cmake Normal file
View File

@@ -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)

1
third_party/SDL3 vendored

Submodule third_party/SDL3 deleted from 61bf7087f5

Submodule third_party/freetype deleted from 526ec5c47b