xmake.lua 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. -- xmake.lua for AV Framework
  2. -- 设置项目信息
  3. set_project("AV_Framework")
  4. set_version("1.0.0")
  5. set_languages("c++17")
  6. -- 设置编译模式
  7. add_rules("mode.debug", "mode.release")
  8. -- 设置编译选项
  9. if is_plat("windows") then
  10. add_cxflags("/W3", "/utf-8")
  11. add_defines("_CRT_SECURE_NO_WARNINGS")
  12. else
  13. add_cxflags("-Wall", "-Wextra")
  14. end
  15. -- 添加包依赖
  16. -- add_requires("ffmpeg") -- 注释掉,使用本地FFmpeg库
  17. -- 基础库
  18. target("av_base")
  19. set_kind("static")
  20. add_files("code/base/*.cpp")
  21. add_headerfiles("code/base/*.h")
  22. add_includedirs(".", {public = true})
  23. -- Windows特定设置
  24. if is_plat("windows") then
  25. add_syslinks("ws2_32", "winmm")
  26. -- FFmpeg库链接
  27. add_includedirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/include")
  28. add_linkdirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/lib")
  29. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  30. add_links("avdevice", "avfilter", "postproc")
  31. else
  32. add_syslinks("pthread")
  33. end
  34. -- 编解码库
  35. target("av_codec")
  36. set_kind("static")
  37. add_files("code/codec/*.cpp")
  38. add_headerfiles("code/codec/*.h")
  39. add_includedirs(".", {public = true})
  40. add_deps("av_base")
  41. -- FFmpeg库链接
  42. if is_plat("windows") then
  43. -- Windows下的FFmpeg库路径
  44. add_includedirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/include")
  45. add_linkdirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/lib")
  46. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  47. add_links("avdevice", "avfilter", "postproc")
  48. else
  49. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  50. end
  51. -- -- 捕获库
  52. -- target("av_capture")
  53. -- set_kind("static")
  54. -- add_files("code/capture/*.cpp")
  55. -- add_headerfiles("code/capture/*.h")
  56. -- add_includedirs(".", {public = true})
  57. -- add_deps("av_base")
  58. -- -- FFmpeg库链接
  59. -- if is_plat("windows") then
  60. -- add_includedirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/include")
  61. -- add_linkdirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/lib")
  62. -- add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  63. -- add_links("avdevice", "avfilter", "postproc")
  64. -- end
  65. -- -- 混流库
  66. -- target("av_muxer")
  67. -- set_kind("static")
  68. -- add_files("code/muxer/*.cpp")
  69. -- add_headerfiles("code/muxer/*.h")
  70. -- add_includedirs(".", {public = true})
  71. -- add_deps("av_base")
  72. -- -- FFmpeg库链接
  73. -- if is_plat("windows") then
  74. -- add_includedirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/include")
  75. -- add_linkdirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/lib")
  76. -- add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  77. -- add_links("avdevice", "avfilter", "postproc")
  78. -- end
  79. -- -- 工具库
  80. -- target("av_utils")
  81. -- set_kind("static")
  82. -- add_files("code/utils/*.cpp")
  83. -- add_headerfiles("code/utils/*.h")
  84. -- add_includedirs(".", {public = true})
  85. -- add_deps("av_base")
  86. -- -- FFmpeg库链接
  87. -- if is_plat("windows") then
  88. -- add_includedirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/include")
  89. -- add_linkdirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/lib")
  90. -- add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  91. -- add_links("avdevice", "avfilter", "postproc")
  92. -- end
  93. -- -- 完整的AV框架库
  94. -- target("av_framework")
  95. -- set_kind("static")
  96. -- add_deps("av_base", "av_codec", "av_capture", "av_muxer", "av_utils")
  97. -- add_includedirs(".", {public = true})
  98. -- 基础测试程序
  99. target("test_basic")
  100. set_kind("binary")
  101. add_files("test_basic.cpp")
  102. add_deps("av_base")
  103. set_targetdir("$(buildir)/bin")
  104. -- FFmpeg库链接
  105. if is_plat("windows") then
  106. add_includedirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/include")
  107. add_linkdirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/lib")
  108. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  109. add_links("avdevice", "avfilter", "postproc")
  110. end
  111. -- 编解码测试程序
  112. target("test_codec")
  113. set_kind("binary")
  114. add_files("test_codec.cpp")
  115. add_deps("av_codec")
  116. set_targetdir("$(buildir)/bin")
  117. -- FFmpeg库链接
  118. if is_plat("windows") then
  119. add_includedirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/include")
  120. add_linkdirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/lib")
  121. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  122. add_links("avdevice", "avfilter", "postproc")
  123. end
  124. -- 解码器测试程序
  125. target("test_decoder")
  126. set_kind("binary")
  127. add_files("test_decoder.cpp")
  128. add_deps("av_codec")
  129. set_targetdir("$(buildir)/bin")
  130. -- FFmpeg库链接
  131. if is_plat("windows") then
  132. add_includedirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/include")
  133. add_linkdirs("E:/AAA/ffmpeg-7.0.2-full_build-shared/lib")
  134. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  135. add_links("avdevice", "avfilter", "postproc")
  136. end
  137. -- Windows下复制FFmpeg DLL
  138. if is_plat("windows") then
  139. after_build(function (target)
  140. local ffmpeg_bin = "E:/AAA/ffmpeg-7.0.2-full_build-shared/bin"
  141. local target_dir = target:targetdir()
  142. -- 复制FFmpeg DLL文件
  143. local dlls = {
  144. "avcodec-60.dll",
  145. "avformat-60.dll",
  146. "avutil-58.dll",
  147. "swscale-7.dll",
  148. "swresample-4.dll",
  149. "avdevice-60.dll",
  150. "avfilter-9.dll",
  151. "postproc-57.dll"
  152. }
  153. for _, dll in ipairs(dlls) do
  154. local src = path.join(ffmpeg_bin, dll)
  155. local dst = path.join(target_dir, dll)
  156. if os.exists(src) then
  157. os.cp(src, dst)
  158. print("Copied: " .. dll)
  159. end
  160. end
  161. end)
  162. end