此版本重构了整个xmake,使得xmake更加方便地进行多语言扩展,并且在之前原有的构建语言支持上,新增了对golang, dlang 和 rust 程序构建支持。
并且重写了所有文档,提供更加详细完整的接口手册和文档支持:新版文档
License也从之前的LGPLv2.1改为Apache License 2.0,更加详细的改进请看下面详细描述:
--links, --linkdirs and --includedirs 配置参数xmake.lua工程描述增加dictionay语法风格xmake.lua等工程描述文件的情况下,也能直接快速编译xmake.lua工程描述添加set_xmakever接口,更加友好的处理版本兼容性问题objc和swift程序添加add_frameworks接口golang, dlang和rust程序构建的支持target_end, option_end 和task_end等可选api,用于显示结束描述域,进入根域设置,提高可读性golang, dlang和rust工程模板os.run, os.exec, os.cp, os.mv 和 os.rm 等接口,支持通配符模式匹配和批量文件操作-q|--quiet选项实现静默构建makefile生成插件,抽取编译工具和编译选项到全局变量之前的wiki文档结构不是很好,而且不方便检索。
因此最近使用docute这个文档工具,重写了一遍整个xmake文档,并且增加了更加详细的api文档手册,后续会持续更新维护。
目前英文版本的手册还不是很完善,有兴趣的同学可以帮忙一起翻译下哦,现在的新版文档支持多人编辑提交到github来共同维护。
文档地址:
之前在给xmake做构建的效率优化的时候,需要对lua脚本的api调用性能进行分析,分析出最耗时一些lua调用api, 找出性能瓶颈,来针对性地进行优化,那么问题来了,如果对lua脚本像c程序那样进行profile呢?
我们现在看下最后实现完的最终效果:
 4.681,  98.84%,       1, anonymous                     : actions/build/main.lua: 36
 3.314,  69.98%,       1, anonymous                     : actions/build/main.lua: 66
 3.314,  69.98%,       1, build                         : actions/build/builder.lua: 127
 3.298,  69.65%,       2, _build_target                 : actions/build/builder.lua: 41
 3.298,  69.65%,       2, script                        : actions/build/builder.lua: 30
 2.590,  54.70%,       2, buildall                      : actions/build/kinds/object.lua: 174
 2.239,  47.27%,     468, resume                        : core/sandbox/modules/coroutine.lua: 40
 2.226,  47.00%,     468, anonymous                     : actions/build/kinds/object.lua: 242
 2.073,  43.77%,       3, _build_target_and_deps        : actions/build/builder.lua: 64
 2.047,  43.22%,     468, _build                        : actions/build/kinds/object.lua: 79
 2.034,  42.96%,       1, build                         : actions/build/kinds/static.lua: 31
 1.190,  25.13%,       1, build                         : actions/build/kinds/binary.lua: 31
 0.806,  17.03%,       8, load                          : core/base/interpreter.lua: 527
 0.766,  16.18%,       2, run                           : core/project/task.lua: 393
 0.711,  15.01%,       1, anonymous                     : actions/config/main.lua: 132
 0.615,  12.99%,    2117, vformat                       : core/sandbox/modules/string.lua: 40
 0.593,  12.53%,      16, defaults                      : core/base/option.lua: 803
 0.593,  12.52%,       1, save                          : core/base/option.lua: 131
 0.475,  10.03%,       2, anonymous                     : /Users/ruki/projects/personal/tbox/xmake.lua: 0
其中第一列为当前调用的耗时(单位:cpu时钟数),第二列为耗时占比,第三列为调用次数,然后是函数名和源代码位置。
其实lua自带的debug就可以做到:
debug库提供了一种hook的方式,可以通过注册一个handler函数,在lua脚本运行到某个调用时,会触发这个handler,
获取到相应的执行信息,并且给你一个记录和数据维护的机会。
它主要有四种事件会触发这个handler的调用:
我们可以通过debug.sethook这个函数来注册一个hook的handler,他有三个参数:
为了更好地促进TBOOX开源项目的发展,我们决定采用更加宽松、对开发者更加友好的Apache License 2.0
详细license说明见:Apache License 2.0