cmake_minimum_required(VERSION 3.16) project(DNF C CXX) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/DNF) set(CMAKE_CXX_STANDARD 17) # 添加子目录,引用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) 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}) set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O1 -g" CACHE STRING "" FORCE) 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 # zlib库 squirrel_static # squirrel库(根据实际目标名调整) sqstdlib_static mingwex winmm imm32 setupapi version ole32 uuid )