| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- -- 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
|