xmake.lua 5.9 KB

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