-- xmake.lua for AV Framework -- 设置项目信息 set_project("AV_Framework") set_version("1.0.0") set_languages("c++17") -- 设置编译模式 add_rules("mode.debug", "mode.release") -- 设置编译选项 if is_plat("windows") then add_cxflags("/W3", "/utf-8") add_defines("_CRT_SECURE_NO_WARNINGS") else add_cxflags("-Wall", "-Wextra") end -- 添加包依赖 -- add_requires("ffmpeg") -- 注释掉,使用本地FFmpeg库 -- 基础库 target("av_base") set_kind("static") add_files("code/base/*.cpp") add_headerfiles("code/base/*.h") add_includedirs(".", {public = true}) -- Windows特定设置 if is_plat("windows") then add_syslinks("ws2_32", "winmm") -- FFmpeg库链接 add_includedirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/include") add_linkdirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/lib") add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") else add_syslinks("pthread") end -- 编解码库 target("av_codec") set_kind("static") add_files("code/codec/*.cpp") add_headerfiles("code/codec/*.h") add_includedirs(".", {public = true}) add_deps("av_base") -- FFmpeg库链接 if is_plat("windows") then -- Windows下的FFmpeg库路径 add_includedirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/include") add_linkdirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/lib") add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") else add_links("avcodec", "avformat", "avutil", "swscale", "swresample") end -- -- 捕获库 -- target("av_capture") -- set_kind("static") -- add_files("code/capture/*.cpp") -- add_headerfiles("code/capture/*.h") -- add_includedirs(".", {public = true}) -- add_deps("av_base") -- -- FFmpeg库链接 -- if is_plat("windows") then -- add_includedirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/include") -- add_linkdirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/lib") -- add_links("avcodec", "avformat", "avutil", "swscale", "swresample") -- add_links("avdevice", "avfilter", "postproc") -- end -- -- 混流库 -- target("av_muxer") -- set_kind("static") -- add_files("code/muxer/*.cpp") -- add_headerfiles("code/muxer/*.h") -- add_includedirs(".", {public = true}) -- add_deps("av_base") -- -- FFmpeg库链接 -- if is_plat("windows") then -- add_includedirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/include") -- add_linkdirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/lib") -- add_links("avcodec", "avformat", "avutil", "swscale", "swresample") -- add_links("avdevice", "avfilter", "postproc") -- end -- -- 工具库 -- target("av_utils") -- set_kind("static") -- add_files("code/utils/*.cpp") -- add_headerfiles("code/utils/*.h") -- add_includedirs(".", {public = true}) -- add_deps("av_base") -- -- FFmpeg库链接 -- if is_plat("windows") then -- add_includedirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/include") -- add_linkdirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/lib") -- add_links("avcodec", "avformat", "avutil", "swscale", "swresample") -- add_links("avdevice", "avfilter", "postproc") -- end -- -- 完整的AV框架库 -- target("av_framework") -- set_kind("static") -- add_deps("av_base", "av_codec", "av_capture", "av_muxer", "av_utils") -- add_includedirs(".", {public = true}) -- 基础测试程序 target("test_basic") set_kind("binary") add_files("test_basic.cpp") add_deps("av_base") set_targetdir("$(buildir)/bin") -- FFmpeg库链接 if is_plat("windows") then add_includedirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/include") add_linkdirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/lib") add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") end -- 编解码测试程序 target("test_codec") set_kind("binary") add_files("test_codec.cpp") add_deps("av_codec") set_targetdir("$(buildir)/bin") -- FFmpeg库链接 if is_plat("windows") then add_includedirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/include") add_linkdirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/lib") add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") end -- 解码器测试程序 target("test_decoder") set_kind("binary") add_files("test_decoder.cpp") add_deps("av_codec") set_targetdir("$(buildir)/bin") -- FFmpeg库链接 if is_plat("windows") then add_includedirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/include") add_linkdirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/lib") add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") end -- Windows下复制FFmpeg DLL if is_plat("windows") then after_build(function (target) local ffmpeg_bin = "E:/AAA/ffmpeg-7.0.2-full_build-shared/bin" local target_dir = target:targetdir() -- 复制FFmpeg DLL文件 local dlls = { "avcodec-60.dll", "avformat-60.dll", "avutil-58.dll", "swscale-7.dll", "swresample-4.dll", "avdevice-60.dll", "avfilter-9.dll", "postproc-57.dll" } for _, dll in ipairs(dlls) do local src = path.join(ffmpeg_bin, dll) local dst = path.join(target_dir, dll) if os.exists(src) then os.cp(src, dst) print("Copied: " .. dll) end end end) end