139 lines
5.5 KiB
CMake
139 lines
5.5 KiB
CMake
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) # 你的环境是 MinGW(Strawberry 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
|
||
)
|