xmake 后期发展随想 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
waruqi
V2EX    编程

xmake 后期发展随想

  •  
  •   waruqi 2016-06-25 21:44:18 +08:00 3011 次点击
    这是一个创建于 3465 天前的主题,其中的信息可能已经有所发展或是发生改变。

    随着 xmake v2.0.1 版本的发布,这大半年的辛苦总算告一段落,这个版本我基本上重构整个项目的 90%的代码,几乎算是重写了,但结果还算挺满意的。。

    因为上个版本的架构设计的不是很好,不能很好进行扩展,也不支持插件模式,语法设计上也不严谨,容易出现各种隐患,这对于后期维护和发展来说,已经出现了不可逾越的瓶颈。。

    每个项目到了一定阶段,都是要不断重构,重新构思整体架构,才能使得项目不断的向好的方向演进。。

    (当然如果是公司项目就另当别论了,坑太多,历史负担较重,不是说要重构就能让你重构的。=。=)

    回归正题,目前 xmake 基本上所有模块都是可扩展的:

    • 插件扩展
    • 工程模板扩展
    • 平台架构扩展
    • action 扩展
    • option 选项扩展
    • 自定义 task 任务机制
    • 宏脚本扩展

    模块化和可扩展性,使得 xmake 整体是高度解耦的,整个 core 的内核算法实现非常轻量,其他模块如果我们想要扩展它,只需要把自己实现的脚本放到对应目录,就可以实现自注册,自加载。。

    并且每个插件模块内部都有严格的作用域控制、沙盒化处理,非常安全,不会干扰到其他插件。。

    下一个大版本,我打算开始研究下,怎么去实现完善的依赖包管理,目前的一些想法和构思:

    • 自动检测依赖包,如果存在直接链接编译,如果不存在,从远程仓库中自动下载对应版本,进行本地编译安装,然后自动集成和链接

    • 支持多架构、多平台以及交叉平台的包管理

    • 参考 homebrew 的包管理思想,将仓库放在项目中,通过 git 维护

    • 为了实现交叉平台的包管理,仓库的包描述,除了提供包原代码的 url 外,还提供移植描述脚本

    可能我说的有点模糊,先说说现有的一些包管理工具,例如: homebrew 、 apt-get 、 pacman 等等。。

    大同小异,都是下载、自动编译、安装集成到系统中,不过都只能支持 pc 原有的主机平台,并不支持交叉平台

    例如:在 windows 上我要自动加载安装一个 ios armv7s 的包,集成到我的项目中。。这就不行了。

    而 xmake 的下个版本,打算做的就是这个,简单的说:

    我要做一个移植仓库,实现一人移植,万人使用

    以后,如果用 xmake 编译项目,这个项目中说需要链接 android 版本 armv7-a 的 libpng.a ,那么 xmake 就会先检测本地仓库是否存在,不存在的话,就会从移植仓库中, check 处移植脚本,自动进行本地移植编译,然后链接到这个项目中去。。。

    明白了吗,是不是很有趣。。?

    现在的开源项目越来越多,平台也越来越多,但是很多 c/c++项目的移植工作相当麻烦,不同项目编译方式区别很大,平台支持力度也各不一样。。

    而我们平常移植后,基本上只能自己使用,没法分享给别人

    而下个版本, xmake 要做的就是让其他人不用重新再移植一边,只要有人移植过,把移植过程记录成移植脚本, push 到 xmake 的移植仓库中,让所有人共享移植成果。。这是多美妙的一件事哈。。:)

    我表达能力有限,貌似有点嗦了,最后我对 xmake 的期望就是:

    它不仅仅是个跨平台构建工具,也将会成为移植神器,一人移植,万人共享就是 xmake 的目标!


    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2469 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 15:15 PVG 23:15 LAX 07:15 JFK 10:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86