xmake.lua 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. -- FFmpeg库路径配置 - 支持环境变量和默认路径
  2. local ffmpeg_path = os.getenv("FFMPEG_PATH") or "E:/AAA/ffmpeg-7.0.2-full_build-shared"
  3. local ffmpeg_include = ffmpeg_path .. "/include"
  4. local ffmpeg_lib = ffmpeg_path .. "/lib"
  5. -- 检查FFmpeg路径是否存在
  6. if not os.isdir(ffmpeg_include) then
  7. print("Warning: FFmpeg include directory not found: " .. ffmpeg_include)
  8. print("Please set FFMPEG_PATH environment variable or update the path in xmake.lua")
  9. end
  10. -- 基础库
  11. target("av_base")
  12. set_kind("static")
  13. add_files("code/base/*.cpp")
  14. add_headerfiles("code/base/*.h")
  15. add_includedirs(".", {public = true})
  16. -- Windows特定设置
  17. if is_plat("windows") then
  18. add_syslinks("ws2_32", "winmm")
  19. -- FFmpeg库链接
  20. add_includedirs(ffmpeg_include)
  21. add_linkdirs(ffmpeg_lib)
  22. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  23. add_links("avdevice", "avfilter", "postproc")
  24. else
  25. add_syslinks("pthread")
  26. end
  27. -- 编解码库
  28. target("av_codec")
  29. set_kind("static")
  30. add_files("code/codec/*.cpp")
  31. add_headerfiles("code/codec/*.h")
  32. add_includedirs(".", {public = true})
  33. add_deps("av_base")
  34. -- FFmpeg库链接
  35. if is_plat("windows") then
  36. add_includedirs(ffmpeg_include)
  37. add_linkdirs(ffmpeg_lib)
  38. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  39. add_links("avdevice", "avfilter", "postproc")
  40. else
  41. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  42. end
  43. -- 捕获库
  44. target("av_capture")
  45. set_kind("static")
  46. add_files("code/capture/*.cpp")
  47. add_headerfiles("code/capture/*.h")
  48. add_includedirs(".", {public = true})
  49. add_deps("av_base")
  50. -- FFmpeg库链接
  51. if is_plat("windows") then
  52. add_includedirs(ffmpeg_include)
  53. add_linkdirs(ffmpeg_lib)
  54. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  55. add_links("avdevice", "avfilter", "postproc")
  56. end
  57. -- 混流库
  58. target("av_muxer")
  59. set_kind("static")
  60. add_files("code/muxer/*.cpp")
  61. add_headerfiles("code/muxer/*.h")
  62. add_includedirs(".", {public = true})
  63. add_deps("av_base")
  64. -- FFmpeg库链接
  65. if is_plat("windows") then
  66. add_includedirs(ffmpeg_include)
  67. add_linkdirs(ffmpeg_lib)
  68. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  69. add_links("avdevice", "avfilter", "postproc")
  70. end
  71. -- 工具库
  72. target("av_utils")
  73. set_kind("static")
  74. add_files("code/utils/*.cpp")
  75. add_headerfiles("code/utils/*.h")
  76. add_includedirs(".", {public = true})
  77. add_deps("av_base")
  78. -- FFmpeg库链接
  79. if is_plat("windows") then
  80. add_includedirs(ffmpeg_include)
  81. add_linkdirs(ffmpeg_lib)
  82. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  83. add_links("avdevice", "avfilter", "postproc")
  84. end
  85. -- -- 完整的AV框架库
  86. -- target("av_framework")
  87. -- set_kind("static")
  88. -- add_deps("av_base", "av_codec", "av_capture", "av_muxer", "av_utils")
  89. -- add_includedirs(".", {public = true})
  90. set_runtimes("MD")
  91. target("player")
  92. add_rules("qt.widgetapp")
  93. set_targetdir("$(buildir)/bin")
  94. add_files("integration_example.cpp", {rules = "qt.moc"})
  95. add_deps("av_base", "av_codec", "av_capture", "av_muxer", "av_utils")
  96. add_includedirs(".", {public = true})
  97. add_files("code/player/*.cpp")
  98. add_headerfiles("code/player/*.h")
  99. add_files("code/player/*.h", {rules = "qt.moc"})
  100. add_frameworks("QtNetwork", "QtGui", "QtCore", "QtWidgets", "QtMultimedia", "QtOpenGL")
  101. -- FFmpeg库链接
  102. if is_plat("windows") then
  103. add_includedirs(ffmpeg_include)
  104. add_linkdirs(ffmpeg_lib)
  105. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  106. add_links("avdevice", "avfilter", "postproc")
  107. end
  108. -- 基础测试程序
  109. target("test_basic")
  110. set_kind("binary")
  111. add_files("test_basic.cpp")
  112. add_deps("av_base")
  113. set_targetdir("$(buildir)/bin")
  114. -- FFmpeg库链接
  115. if is_plat("windows") then
  116. add_includedirs(ffmpeg_include)
  117. add_linkdirs(ffmpeg_lib)
  118. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  119. add_links("avdevice", "avfilter", "postproc")
  120. end
  121. -- 编解码测试程序
  122. target("test_codec")
  123. set_kind("binary")
  124. add_files("test_codec.cpp")
  125. add_deps("av_codec")
  126. set_targetdir("$(buildir)/bin")
  127. -- FFmpeg库链接
  128. if is_plat("windows") then
  129. add_includedirs(ffmpeg_include)
  130. add_linkdirs(ffmpeg_lib)
  131. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  132. add_links("avdevice", "avfilter", "postproc")
  133. end
  134. -- 解码器测试程序
  135. target("test_decoder")
  136. set_kind("binary")
  137. add_files("test_decoder.cpp")
  138. add_deps("av_codec")
  139. set_targetdir("$(buildir)/bin")
  140. -- FFmpeg库链接
  141. if is_plat("windows") then
  142. add_includedirs(ffmpeg_include)
  143. add_linkdirs(ffmpeg_lib)
  144. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  145. add_links("avdevice", "avfilter", "postproc")
  146. end
  147. -- 音频编码器测试程序
  148. target("test_audio_encoder")
  149. set_kind("binary")
  150. add_files("test_audio_encoder.cpp")
  151. add_deps("av_codec")
  152. set_targetdir("$(buildir)/bin")
  153. -- FFmpeg库链接
  154. if is_plat("windows") then
  155. add_includedirs(ffmpeg_include)
  156. add_linkdirs(ffmpeg_lib)
  157. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  158. add_links("avdevice", "avfilter", "postproc")
  159. end
  160. -- 窗口采集测试程序
  161. target("test_window_capture")
  162. set_kind("binary")
  163. add_files("test_window_capture.cpp")
  164. add_deps("av_capture")
  165. set_targetdir("$(buildir)/bin")
  166. -- FFmpeg库链接
  167. if is_plat("windows") then
  168. add_includedirs(ffmpeg_include)
  169. add_linkdirs(ffmpeg_lib)
  170. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  171. add_links("avdevice", "avfilter", "postproc")
  172. end
  173. -- 工具类测试程序
  174. target("test_utils")
  175. set_kind("binary")
  176. add_files("test_utils.cpp")
  177. add_deps("av_utils")
  178. set_targetdir("$(buildir)/bin")
  179. -- FFmpeg库链接
  180. if is_plat("windows") then
  181. add_includedirs(ffmpeg_include)
  182. add_linkdirs(ffmpeg_lib)
  183. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  184. add_links("avdevice", "avfilter", "postproc")
  185. end
  186. -- 混流器测试程序
  187. target("test_muxer")
  188. set_kind("binary")
  189. add_files("test_muxer.cpp")
  190. add_deps("av_muxer")
  191. set_targetdir("$(buildir)/bin")
  192. -- FFmpeg库链接
  193. if is_plat("windows") then
  194. add_includedirs(ffmpeg_include)
  195. add_linkdirs(ffmpeg_lib)
  196. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  197. add_links("avdevice", "avfilter", "postproc")
  198. end
  199. -- 音频调试测试程序
  200. target("test_audio_debug")
  201. set_kind("binary")
  202. add_files("test_audio_debug.cpp")
  203. add_deps("av_base", "av_codec", "av_utils")
  204. add_files("code/player/player_core_v2.cpp")
  205. add_files("code/player/audio_output.cpp")
  206. add_files("code/player/thread_manager.cpp")
  207. add_headerfiles("code/player/*.h")
  208. set_targetdir("$(buildir)/bin")
  209. add_rules("qt.widgetapp")
  210. add_frameworks("QtCore", "QtWidgets", "QtMultimedia")
  211. -- FFmpeg库链接
  212. if is_plat("windows") then
  213. add_includedirs(ffmpeg_include)
  214. add_linkdirs(ffmpeg_lib)
  215. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  216. add_links("avdevice", "avfilter", "postproc")
  217. end
  218. -- 带UI的播放器测试程序
  219. target("test_player_with_ui")
  220. add_rules("qt.widgetapp")
  221. set_targetdir("$(buildir)/bin")
  222. add_files("test_player_with_ui.cpp", {rules = "qt.moc"})
  223. add_deps("av_base", "av_codec", "av_utils")
  224. add_files("code/player/*.cpp")
  225. add_headerfiles("code/player/*.h")
  226. add_files("code/player/*.h", {rules = "qt.moc"})
  227. add_frameworks("QtNetwork", "QtGui", "QtCore", "QtWidgets", "QtMultimedia", "QtOpenGL")
  228. -- FFmpeg库链接
  229. if is_plat("windows") then
  230. add_includedirs(ffmpeg_include)
  231. add_linkdirs(ffmpeg_lib)
  232. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  233. add_links("avdevice", "avfilter", "postproc")
  234. end
  235. -- 混流器测试程序
  236. target("test_seek_pause_fixed")
  237. set_kind("binary")
  238. add_rules("qt.widgetapp")
  239. add_files("test_seek_pause_fixed.cpp")
  240. add_deps("av_base", "av_codec", "av_utils")
  241. add_includedirs(".", {public = true})
  242. set_targetdir("$(buildir)/bin")
  243. add_frameworks("QtNetwork", "QtGui", "QtCore", "QtWidgets", "QtMultimedia", "QtOpenGL")
  244. -- FFmpeg库链接
  245. if is_plat("windows") then
  246. add_includedirs(ffmpeg_include)
  247. add_linkdirs(ffmpeg_lib)
  248. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  249. add_links("avdevice", "avfilter", "postproc")
  250. end