Files
DNF_DEV/CMakeLists.txt
2026-02-08 16:20:50 +08:00

139 lines
5.5 KiB
CMake
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
cmake_minimum_required(VERSION 3.16)
project(DNF C CXX)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/DNF)
set(CMAKE_CXX_STANDARD 17)
if(MINGW) # 你的环境是 MinGWStrawberry Perl 自带)
# 保留 -g2 精简调试信息(避免体积过大),同时移除可能的优化选项
string(REPLACE "-O2" "-O0" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
string(REPLACE "-O2" "-O0" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
add_compile_options(-g2) # 明确保留调试信息
add_compile_options(-Wa,-mbig-obj) # 解决 MinGW 大文件限制(之前的问题)
add_compile_options(-fno-omit-frame-pointer) # 帮助调试器定位栈帧
endif()
# 添加子目录引用squirrel项目
add_subdirectory(Library/squirrel)
# 添加zlib子项目
set(ZLIB_BUILD_SHARED OFF CACHE BOOL "Disable zlib shared library" FORCE)
set(ZLIB_BUILD_STATIC ON CACHE BOOL "Enable zlib static library" FORCE)
add_subdirectory(Library/zlib-1.3.1)
# 添加SDL2子项目
set(SDL2_DISABLE_INSTALL ON CACHE BOOL "Disable SDL2 installation" FORCE)
set(SDL_STATIC ON CACHE BOOL "Build SDL2 as static library" FORCE)
set(SDL_SHARED OFF CACHE BOOL "Disable SDL2 shared library" FORCE)
set(SDL_BUILD_EXAMPLES OFF CACHE BOOL "Disable SDL2 examples" FORCE)
add_subdirectory(Library/SDL2-2.28.5)
set(SDL2IMAGE_INSTALL OFF CACHE BOOL "Disable SDL2_image installation" FORCE)
set(SDL2IMAGE_BUILD_SHARED OFF CACHE BOOL "Disable SDL2_image shared library" FORCE)
set(SDL2IMAGE_BUILD_STATIC ON CACHE BOOL "Enable SDL2_image static library" FORCE)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Force SDL2_image to build as static library" FORCE)
set(SDL2IMAGE_SAMPLES OFF CACHE BOOL "Disable SDL2_image samples (showanim/showimage)" FORCE)
set(SDL2IMAGE_SAMPLES_INSTALL OFF CACHE BOOL "Disable SDL2_image samples installation" FORCE)
add_subdirectory(Library/SDL2_image-2.5.2)
set(SDL2MIXER_INSTALL OFF CACHE BOOL "Disable SDL2_mixer installation" FORCE)
set(SDL2MIXER_VENDORED ON CACHE BOOL "Use vendored libraries (ogg/opus/flac etc.)" FORCE)
set(SDL2MIXER_DEPS_SHARED OFF CACHE BOOL "Compile vendored deps as static libs" FORCE)
set(SDL2MIXER_BUILD_SHARED OFF CACHE BOOL "Disable SDL2_mixer shared library" FORCE)
set(SDL2MIXER_BUILD_STATIC ON CACHE BOOL "Enable SDL2_mixer static library" FORCE)
set(SDL2MIXER_SAMPLES OFF CACHE BOOL "Disable SDL2_mixer examples (playmus/playwave)" FORCE)
set(SDL2MIXER_VORBIS "VORBISFILE" CACHE STRING "Enable OGG via vorbisfile" FORCE)
set(SDL2MIXER_VORBIS_VORBISFILE_SHARED OFF CACHE BOOL "Link vorbisfile statically" FORCE)
add_subdirectory(Library/SDL_mixer)
set(SDL2NET_INSTALL OFF CACHE BOOL "Disable SDL2_net installation" FORCE)
set(SDL2NET_BUILD_SHARED OFF CACHE BOOL "Disable SDL2_net shared library" FORCE)
set(SDL2NET_BUILD_STATIC ON CACHE BOOL "Enable SDL2_net static library" FORCE)
set(SDL2NET_BUILD_EXAMPLES OFF CACHE BOOL "Disable SDL2_net examples" FORCE)
add_subdirectory(Library/SDL2_net-2.1.1)
set(SDL2TTF_INSTALL OFF CACHE BOOL "Disable SDL2_ttf installation" FORCE)
set(SDL2TTF_VENDORED ON CACHE BOOL "Use vendored freetype/harfbuzz libraries" FORCE)
set(SDL2TTF_HARFBUZZ ON CACHE BOOL "Enable harfbuzz support" FORCE)
set(SDL2TTF_BUILD_SHARED OFF CACHE BOOL "Disable SDL2_ttf shared library" FORCE)
set(SDL2TTF_BUILD_STATIC ON CACHE BOOL "Enable SDL2_ttf static library" FORCE)
set(SDL2TTF_BUILD_EXAMPLES OFF CACHE BOOL "Disable SDL2_ttf examples" FORCE)
add_subdirectory(Library/SDL_ttf)
# 遍历所有目标,过滤可执行文件和实用工具
get_cmake_property(all_targets TARGETS)
if(all_targets) # 确保目标列表不为空
foreach(target ${all_targets})
# 跳过无效目标(如 NOTFOUND
if(target STREQUAL "NOTFOUND")
continue()
endif()
# 获取目标类型
get_target_property(target_type ${target} TYPE)
# 检查类型是否有效(避免非目标的无效值)
if(target_type AND (target_type STREQUAL "EXECUTABLE" OR target_type STREQUAL "UTILITY"))
message(STATUS "Excluding target: ${target} (type: ${target_type})")
set_target_properties(${target} PROPERTIES EXCLUDE_FROM_ALL TRUE)
endif()
endforeach()
endif()
# 收集源文件
file(GLOB_RECURSE SOURCES
"Library/src/*.c"
"source/*.cpp"
"source_game/*.cpp"
)
add_executable(${PROJECT_NAME} ${SOURCES})
if (MINGW)
target_link_options(${PROJECT_NAME} PRIVATE
-static-libgcc
-static-libstdc++
-Wl,-Bstatic,--whole-archive -lpthread -Wl,--no-whole-archive
)
endif()
# 设置头文件目录(包含所有库的头文件路径)
target_include_directories(${PROJECT_NAME} PRIVATE
Library/zlib-1.3.1
Library/SDL2-2.28.5
Library/SDL2-2.28.5/SDL2
Library/include
Library/include/SDL2
Library/squirrel/include
Library/squirrel/squirrel
Library/squirrel/sqstdlib
Library/sqdbg
source
source_game
)
# 指定库文件所在的目录(.lib文件的位置
link_directories(${PROJECT_SOURCE_DIR}/Library/lib)
message("Link directories: ${PROJECT_SOURCE_DIR}/Library/lib")
# 链接预编译库确保这里的库文件名与Library/lib中的实际文件名完全一致
target_link_libraries(${PROJECT_NAME} PRIVATE
SDL2main
SDL2-static
SDL2_image
SDL2_mixer
SDL2_ttf
SDL2_net
zlibstatic
squirrel_static
sqstdlib_static
mingwex
winmm
imm32
setupapi
version
ole32
uuid
)