xmake.lua 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  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. -- FFmpeg库路径配置 - 支持环境变量和默认路径
  16. local ffmpeg_path = os.getenv("FFMPEG_PATH") or "E:/AAA/ffmpeg-7.0.2-full_build-shared"
  17. local ffmpeg_include = ffmpeg_path .. "/include"
  18. local ffmpeg_lib = ffmpeg_path .. "/lib"
  19. -- 检查FFmpeg路径是否存在
  20. if not os.isdir(ffmpeg_include) then
  21. print("Warning: FFmpeg include directory not found: " .. ffmpeg_include)
  22. print("Please set FFMPEG_PATH environment variable or update the path in xmake.lua")
  23. end
  24. -- 基础库
  25. target("av_base")
  26. set_kind("static")
  27. add_files("code/base/*.cpp")
  28. add_headerfiles("code/base/*.h")
  29. add_includedirs(".", {public = true})
  30. -- Windows特定设置
  31. if is_plat("windows") then
  32. add_syslinks("ws2_32", "winmm")
  33. -- FFmpeg库链接
  34. add_includedirs(ffmpeg_include)
  35. add_linkdirs(ffmpeg_lib)
  36. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  37. add_links("avdevice", "avfilter", "postproc")
  38. else
  39. add_syslinks("pthread")
  40. end
  41. -- 编解码库
  42. target("av_codec")
  43. set_kind("static")
  44. add_files("code/codec/*.cpp")
  45. add_headerfiles("code/codec/*.h")
  46. add_includedirs(".", {public = true})
  47. add_deps("av_base")
  48. -- FFmpeg库链接
  49. if is_plat("windows") then
  50. add_includedirs(ffmpeg_include)
  51. add_linkdirs(ffmpeg_lib)
  52. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  53. add_links("avdevice", "avfilter", "postproc")
  54. else
  55. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  56. end
  57. -- 捕获库
  58. target("av_capture")
  59. set_kind("static")
  60. add_files("code/capture/*.cpp")
  61. add_headerfiles("code/capture/*.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_muxer")
  73. set_kind("static")
  74. add_files("code/muxer/*.cpp")
  75. add_headerfiles("code/muxer/*.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. -- 工具库
  86. target("av_utils")
  87. set_kind("static")
  88. add_files("code/utils/*.cpp")
  89. add_headerfiles("code/utils/*.h")
  90. add_includedirs(".", {public = true})
  91. add_deps("av_base")
  92. -- FFmpeg库链接
  93. if is_plat("windows") then
  94. add_includedirs(ffmpeg_include)
  95. add_linkdirs(ffmpeg_lib)
  96. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  97. add_links("avdevice", "avfilter", "postproc")
  98. end
  99. -- -- 完整的AV框架库
  100. -- target("av_framework")
  101. -- set_kind("static")
  102. -- add_deps("av_base", "av_codec", "av_capture", "av_muxer", "av_utils")
  103. -- add_includedirs(".", {public = true})
  104. set_runtimes("MD")
  105. target("player")
  106. add_rules("qt.widgetapp")
  107. set_targetdir("$(buildir)/bin")
  108. add_files("integration_example.cpp", {rules = "qt.moc"})
  109. add_deps("av_base", "av_codec", "av_capture", "av_muxer", "av_utils")
  110. add_includedirs(".", {public = true})
  111. add_files("code/player/*.cpp")
  112. add_headerfiles("code/player/*.h")
  113. add_files("code/player/*.h", {rules = "qt.moc"})
  114. add_frameworks("QtNetwork", "QtGui", "QtCore", "QtWidgets", "QtMultimedia", "QtOpenGL")
  115. -- FFmpeg库链接
  116. if is_plat("windows") then
  117. add_includedirs(ffmpeg_include)
  118. add_linkdirs(ffmpeg_lib)
  119. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  120. add_links("avdevice", "avfilter", "postproc")
  121. end
  122. -- 基础测试程序
  123. target("test_basic")
  124. set_kind("binary")
  125. add_files("test_basic.cpp")
  126. add_deps("av_base")
  127. set_targetdir("$(buildir)/bin")
  128. -- FFmpeg库链接
  129. if is_plat("windows") then
  130. add_includedirs(ffmpeg_include)
  131. add_linkdirs(ffmpeg_lib)
  132. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  133. add_links("avdevice", "avfilter", "postproc")
  134. end
  135. -- 编解码测试程序
  136. target("test_codec")
  137. set_kind("binary")
  138. add_files("test_codec.cpp")
  139. add_deps("av_codec")
  140. set_targetdir("$(buildir)/bin")
  141. -- FFmpeg库链接
  142. if is_plat("windows") then
  143. add_includedirs(ffmpeg_include)
  144. add_linkdirs(ffmpeg_lib)
  145. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  146. add_links("avdevice", "avfilter", "postproc")
  147. end
  148. -- 解码器测试程序
  149. target("test_decoder")
  150. set_kind("binary")
  151. add_files("test_decoder.cpp")
  152. add_deps("av_codec")
  153. set_targetdir("$(buildir)/bin")
  154. -- FFmpeg库链接
  155. if is_plat("windows") then
  156. add_includedirs(ffmpeg_include)
  157. add_linkdirs(ffmpeg_lib)
  158. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  159. add_links("avdevice", "avfilter", "postproc")
  160. end
  161. -- 音频编码器测试程序
  162. target("test_audio_encoder")
  163. set_kind("binary")
  164. add_files("test_audio_encoder.cpp")
  165. add_deps("av_codec")
  166. set_targetdir("$(buildir)/bin")
  167. -- FFmpeg库链接
  168. if is_plat("windows") then
  169. add_includedirs(ffmpeg_include)
  170. add_linkdirs(ffmpeg_lib)
  171. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  172. add_links("avdevice", "avfilter", "postproc")
  173. end
  174. -- 窗口采集测试程序
  175. target("test_window_capture")
  176. set_kind("binary")
  177. add_files("test_window_capture.cpp")
  178. add_deps("av_capture")
  179. set_targetdir("$(buildir)/bin")
  180. -- FFmpeg库链接
  181. if is_plat("windows") then
  182. add_includedirs(ffmpeg_include)
  183. add_linkdirs(ffmpeg_lib)
  184. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  185. add_links("avdevice", "avfilter", "postproc")
  186. end
  187. -- 工具类测试程序
  188. target("test_utils")
  189. set_kind("binary")
  190. add_files("test_utils.cpp")
  191. add_deps("av_utils")
  192. set_targetdir("$(buildir)/bin")
  193. -- FFmpeg库链接
  194. if is_plat("windows") then
  195. add_includedirs(ffmpeg_include)
  196. add_linkdirs(ffmpeg_lib)
  197. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  198. add_links("avdevice", "avfilter", "postproc")
  199. end
  200. -- 混流器测试程序
  201. target("test_muxer")
  202. set_kind("binary")
  203. add_files("test_muxer.cpp")
  204. add_deps("av_muxer")
  205. set_targetdir("$(buildir)/bin")
  206. -- FFmpeg库链接
  207. if is_plat("windows") then
  208. add_includedirs(ffmpeg_include)
  209. add_linkdirs(ffmpeg_lib)
  210. add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
  211. add_links("avdevice", "avfilter", "postproc")
  212. end