xmake.lua 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. -- includes("AV")
  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. target("qt_widgetapp")
  16. add_rules("qt.widgetapp")
  17. set_rundir("$(projectdir)/ci_build")
  18. on_build(function (target)
  19. print("build it")
  20. import("core.base.hashset")
  21. import("private.action.run.runenvs", {try = true})
  22. if not runenvs then
  23. import("private.action.run.make_runenvs")
  24. end
  25. -- 获取当前 target 的环境
  26. function _add_target_pkgenvs(target, pkgenvs, targets_added)
  27. if targets_added[target:name()] then
  28. return
  29. end
  30. targets_added[target:name()] = true
  31. table.join2(pkgenvs, target:pkgenvs())
  32. for _, dep in ipairs(target:orderdeps()) do
  33. _add_target_pkgenvs(dep, pkgenvs, targets_added)
  34. end
  35. end
  36. local pkgenvs = {}
  37. _add_target_pkgenvs(target, pkgenvs, {})
  38. -- 获取当前系统的环境
  39. local addrunenvs, setrunenvs = runenvs and runenvs.make(target) or make_runenvs(target)
  40. local runenvs = { add = addrunenvs, set = setrunenvs }
  41. for name, env in pairs(pkgenvs) do
  42. runenvs.add[name] = runenvs.add[name] or {}
  43. table.append(runenvs.add[name], env)
  44. end
  45. -- PATH 环境整合 添加 到系统
  46. if type(runenvs.add) == "table" then
  47. for key, value in pairs(runenvs.add) do
  48. --print(key, value)
  49. for i, v in pairs(value) do
  50. os.addenvs({[key] = v})
  51. end
  52. end
  53. end
  54. -- key: LIB PATH
  55. function add_toolchain_envs(key)
  56. local env_table = {}
  57. local search_env_set = hashset.new()
  58. local function insert_include(dir)
  59. if not path.is_absolute(dir) then
  60. dir = path.absolute(dir, os.projectdir())
  61. end
  62. if search_env_set:insert(dir) then
  63. table.insert(env_table, dir)
  64. end
  65. end
  66. for _, toolchain in ipairs(target:toolchains()) do
  67. local runenvs = toolchain:runenvs()
  68. if runenvs and runenvs[key] then
  69. for _, env in ipairs(path.splitenv(runenvs[key])) do
  70. insert_include(env)
  71. end
  72. end
  73. end
  74. -- INCLUDE 环境整合
  75. for _, value in pairs(env_table) do
  76. os.addenvs({[key] = value})
  77. end
  78. end
  79. -- 添加工具链需要的环境信息
  80. add_toolchain_envs("LIBPATH")
  81. add_toolchain_envs("LIB")
  82. add_toolchain_envs("INCLUDE")
  83. local envs = os.getenvs()
  84. local rundir = path.join(os.projectdir(), "ci_build")
  85. -- 确保运行目录存在
  86. os.mkdir(rundir)
  87. os.execv("qmake", {"-version"}, {envs = envs, curdir = rundir})
  88. -- print(envs)
  89. local proPath = path.join(os.projectdir(), "LearningSmartClient.pro")
  90. print("build:", proPath)
  91. if is_mode("debug") then
  92. os.execv("qmake", {proPath, "-spec", "win32-msvc", "CONFIG+=debug", "CONFIG+=qml_debug"}, {envs = envs, curdir = rundir})
  93. elseif is_mode("release") then
  94. os.execv("qmake", {proPath, "-spec", "win32-msvc", "CONFIG+=release"}, {envs = envs, curdir = rundir})
  95. else
  96. print("no supp QMake")
  97. end
  98. local jom = "D:\\Qt\\Tools\\QtCreator\\bin\\jom\\jom.exe"
  99. if is_mode("debug") then
  100. os.execv(jom, {"-f", "Makefile.Debug", "qmake_all"}, {envs = envs, curdir = rundir})
  101. elseif is_mode("release") then
  102. os.execv(jom, {"-f", "Makefile.Release", "qmake_all"}, {envs = envs, curdir = rundir})
  103. else
  104. print("no supp mode Makefile")
  105. end
  106. os.execv(jom, {"-j24"}, {envs = envs, curdir = rundir})
  107. end)
  108. target_end()