-- MinGW 编译配置 set_toolchains("mingw") add_requires("libsdl2", {configs = {shared = true}}) add_requires("libsdl2_image", {configs = {shared = true}}) add_requires("libsdl2_mixer", {configs = {shared = true}}) add_requires("glm") add_requires("zlib") target("Frostbite2D") set_kind("binary") add_files(path.join(os.projectdir(), "Frostbite2D/src/**.cpp")) add_files(path.join(os.projectdir(), "Frostbite2D/src/**.c")) add_includedirs(path.join(os.projectdir(), "Frostbite2D/include")) add_files(path.join(os.projectdir(), "Game/src/**.cpp")) add_includedirs(path.join(os.projectdir(), "Game/include")) add_packages("libsdl2") add_packages("libsdl2_image") add_packages("libsdl2_mixer") add_packages("glm") add_packages("zlib") -- 复制 assets 目录到输出目录 after_build(function (target) -- 复制 assets 目录 local assets_dir = path.join(os.projectdir(), "Game/assets") local output_dir = target:targetdir() local target_assets_dir = path.join(output_dir, "assets") if os.isdir(assets_dir) then os.rm(target_assets_dir) os.cp(assets_dir, output_dir) print("Copy assets directory: " .. assets_dir .. " -> " .. target_assets_dir) end -- 复制所有依赖的 DLL (Windows 平台) if is_plat("mingw") or is_plat("windows") then -- 复制所有包的 DLL 文件 local all_pkgs = {"libsdl2", "libsdl2_image", "libsdl2_mixer"} for _, pkg_name in ipairs(all_pkgs) do local pkg = target:pkg(pkg_name) if pkg then local libfiles = pkg:get("libfiles") if libfiles then for _, libfile in ipairs(libfiles) do if libfile:endswith(".dll") then local target_dll = path.join(output_dir, path.filename(libfile)) os.cp(libfile, target_dll) print("Copy DLL: " .. path.filename(libfile)) end end end end end -- 从 xmake 包目录复制所有可能的依赖 DLL local user_profile = os.getenv("USERPROFILE") or "" local packages_dir = path.join(user_profile, ".xmake/packages/l") local common_dll_patterns = { path.join(packages_dir, "libogg/**/*.dll"), path.join(packages_dir, "libvorbis/**/*.dll"), path.join(packages_dir, "libvorbisfile/**/*.dll"), path.join(packages_dir, "libmpg123/**/*.dll"), path.join(packages_dir, "libflac/**/*.dll"), path.join(packages_dir, "libsndfile/**/*.dll"), path.join(packages_dir, "libmodplug/**/*.dll"), path.join(packages_dir, "opus/**/*.dll"), path.join(packages_dir, "opusfile/**/*.dll"), path.join(packages_dir, "**/*.dll") } for _, dll_pattern in ipairs(common_dll_patterns) do local dll_files = os.files(dll_pattern) for _, dll_file in ipairs(dll_files) do local dll_name = path.filename(dll_file) local target_dll = path.join(output_dir, dll_name) if not os.isfile(target_dll) then os.cp(dll_file, target_dll) print("Copy dependency DLL: " .. dll_name) end end end end end) target_end()