此版本重构了整个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