2016-07-18 ruki
最近在xmake中,用lua的协程实现了多任务编译,效果还是不错的,不过后来发现一个问题: 如果所有编译进程都在处理编译,没有退出的时候,xmake的lua主进程会不断地在这些任务间,不停的切换轮询进程的状态,但是有没有机会执行其他任务,导致cpu过高,抢占了编译进程的cpu时间。。 那如果在等不到完成的进程时候,加入sleep等待呢,又会导致编译速度变慢,没法合理利用cpu。。 因此,为了解决这个问题,我打算扩展下lua的接口,实现了一个跨平台的多进程等待接口: process.waitlist 实现多个未完成进程的同时等待,让出xmake主进程的cpu时间,给其他编译进程充分利用 xmake中的lua代码如下: ``` 继续阅读 »
2020-10-19 ruki
LTUI是一个基于lua的跨平台字符终端UI界面库。 此框架源于xmake中图形化菜单配置的需求,类似linux kernel的menuconf去配置编译参数,因此基于curses和lua实现了一整套跨平台的字符终端ui库。 而样式风格基本上完全参照的kconfig-frontends,当然用户也可以自己定制不同的ui风格。 另外,LTUI是完全跨平台的,windows上的terminal终端也是完全支持的,在windows上ltui会采用pdcurses来进行窗口绘制。 Github 更新内容 新版本中,我们主要增加了对鼠标事件的支持,除了 curses/ncurses,我们还对 windows 上 pdcurses 也 继续阅读 »
2020-11-30 ruki
LTUI是一个基于lua的跨平台字符终端UI界面库。 此框架源于xmake中图形化菜单配置的需求,类似linux kernel的menuconf去配置编译参数,因此基于curses和lua实现了一整套跨平台的字符终端ui库。 而样式风格基本上完全参照的kconfig-frontends,当然用户也可以自己定制不同的ui风格。 另外,LTUI是完全跨平台的,windows上的terminal终端也是完全支持的,在windows上ltui会采用pdcurses来进行窗口绘制。 Github 更新内容 新版本中,我们改进了对鼠标的支持,实现对所有控件的鼠标事件点击响应,这里我们非常感谢 @laelnasan 贡献。 另外我们新 继续阅读 »
2016-07-23 ruki
xmake 提供了一些内置的条件判断api,用于在选择性编译时,获取到一些工程状态的相关信息,来调整编译逻辑。。 例如:is_os, is_plat, is_arch, is_kind, is_mode, is_option is_mode 我们先拿最常用的is_mode来讲讲如何使用,这个api主要用来判断当前的编译模式,例如平常编译配置的时候,会执行: bash $ xmake f -m debug $ xmake 来编译debug版本,那么模式就是debug,那么release版本,也就是release了 bash $ xmake f -m release $ xmake 但是如果仅仅只是这么配置,xmake 继续阅读 »
2018-02-03 ruki
此版本主要增加xmake f --menu实现用户自定义图形菜单配置,界面风格类似linux的make menuconfig: 更多使用说明,请阅读:文档手册。 项目源码:Github, Gitee. 新特性 添加del_files()接口去从已添加的文件列表中移除一些文件 添加rule(), add_rules()接口实现自定义构建规则,并且改进add_files("src/*.md", {rule = "markdown"}) 添加os.filesize()接口 添加core.ui.xxx等cui组件模块,实现终端可视化界面,用于实现跟用户进行短暂的交互 通过xmake f --menu实现可视化菜单交互配置,简化工 继续阅读 »
2017-03-30 ruki
最近对xmake的操作权限进行了升级,提供更加安全的命令操作,例如: 改进xmake install和xmake uninstall命令,提供更加安全地安装和卸载支持 参考homebrew,禁止在root下运行xmake命令 改进xmake自身的编译安装脚本,不在root下进行build 安全问题1 之前的xmake install和xmake uninstall行为,是自动build后进行安装,而大部分情况下安装目录是在/usr/local目录下。 因此,需要root权限才能写入,那么之前的方式只能暴力地直接加上sudo xmake install来执行。 可想而知,虽然安装确实成功了,但是由于默认的自动构建行为,导致生成 继续阅读 »
2016-08-07 ruki
xmake还可以支持一些自定义选项开关,使得工程支持可选编译,方便工程的模块化管理。 增加自定义编译开关 我们拿一个实际的例子来说: 我们想在自己的工程中增加一个新开关选项:hello, 如果这个开关被启用,会在target中添加特定的一些源码文件,但是这个开挂默认是不被启用的,需要通过配置xmake f --hello=true才会被链接和使用 并且使用的时候,需要定义一些特殊的宏定义:-DHELLO_TEST -DHELLO_ENABLE 那么我们开始进行xmake.lua修改,过程并不复杂: 在xmake.lua的头部通过option接口定义一个名叫hello的开关选项 ```lua --定义一个名叫hello的 继续阅读 »
2017-10-17 ruki
xmake-vscode plugin is a xmake integration in Visual Studio Code. It is deeply integrated with xmake and vscode to provide a convenient and fast cross-platform c/c++ development and building. Features Colorization Completion Lists StatusBar Commands Configuration Build Run and Debug Record and Playback Problem Color 继续阅读 »
2017-09-28 ruki
本文主要介绍下xmake的整体架构设计,以及源码结构的布局和模块划分。 如果你想深度使用xmake,开发xmake插件、工程自定义脚本或者想为xmake贡献一些代码和特性,可以通过此本的介绍,对xmake项目整体有个大概的了解。, 源码地址:Github 顶层目录结构 bash ./xmake/ ├── actions # 内建的一些基础task,用于基本的构建安装等操作 ├── core # xmake的核心模块,提供最底层的实现支持 ├── languages # 所有的语言相关特性支持和扩展,都在此目录下 ├── modules # 内置的扩展模块,可用`import`导入使用 ├── pack 继续阅读 »
2017-11-13 ruki
在2.1.9版本之后,xmake不仅原生内置支持多种语言文件的构建,而且还可以通过自定义构建规则,让用户自己来实现复杂的未知文件构建。 具体使用介绍,可参考相关文档:rule规则使用手册 通用规则 我们可以通过预先设置规则支持的文件后缀,来扩展其他文件的构建支持: ```lua -- 定义一个markdown文件的构建规则 rule("markdown") set_extensions(".md", ".markdown") on_build(function (target, sourcefile) os.cp(sourcefile, path.join(target:targetdir() 继续阅读 »