最近在xmake中,用lua的协程实现了多任务编译,效果还是不错的,不过后来发现一个问题:
如果所有编译进程都在处理编译,没有退出的时候,xmake的lua主进程会不断地在这些任务间,不停的切换轮询进程的状态,但是有没有机会执行其他任务,导致cpu过高,抢占了编译进程的cpu时间。。
那如果在等不到完成的进程时候,加入sleep等待呢,又会导致编译速度变慢,没法合理利用cpu。。
因此,为了解决这个问题,我打算扩展下lua的接口,实现了一个跨平台的多进程等待接口: process.waitlist 实现多个未完成进程的同时等待,让出xmake主进程的cpu时间,给其他编译进程充分利用
xmake中的lua代码如下:
```
继续阅读 »
LTUI是一个基于lua的跨平台字符终端UI界面库。
此框架源于xmake中图形化菜单配置的需求,类似linux kernel的menuconf去配置编译参数,因此基于curses和lua实现了一整套跨平台的字符终端ui库。
而样式风格基本上完全参照的kconfig-frontends,当然用户也可以自己定制不同的ui风格。
另外,LTUI是完全跨平台的,windows上的terminal终端也是完全支持的,在windows上ltui会采用pdcurses来进行窗口绘制。
Github
更新内容
新版本中,我们主要增加了对鼠标事件的支持,除了 curses/ncurses,我们还对 windows 上 pdcurses 也
继续阅读 »
LTUI是一个基于lua的跨平台字符终端UI界面库。
此框架源于xmake中图形化菜单配置的需求,类似linux kernel的menuconf去配置编译参数,因此基于curses和lua实现了一整套跨平台的字符终端ui库。
而样式风格基本上完全参照的kconfig-frontends,当然用户也可以自己定制不同的ui风格。
另外,LTUI是完全跨平台的,windows上的terminal终端也是完全支持的,在windows上ltui会采用pdcurses来进行窗口绘制。
Github
更新内容
新版本中,我们改进了对鼠标的支持,实现对所有控件的鼠标事件点击响应,这里我们非常感谢 @laelnasan 贡献。
另外我们新
继续阅读 »
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
继续阅读 »
此版本主要增加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实现可视化菜单交互配置,简化工
继续阅读 »
最近对xmake的操作权限进行了升级,提供更加安全的命令操作,例如:
改进xmake install和xmake uninstall命令,提供更加安全地安装和卸载支持
参考homebrew,禁止在root下运行xmake命令
改进xmake自身的编译安装脚本,不在root下进行build
安全问题1
之前的xmake install和xmake uninstall行为,是自动build后进行安装,而大部分情况下安装目录是在/usr/local目录下。
因此,需要root权限才能写入,那么之前的方式只能暴力地直接加上sudo xmake install来执行。
可想而知,虽然安装确实成功了,但是由于默认的自动构建行为,导致生成
继续阅读 »
xmake还可以支持一些自定义选项开关,使得工程支持可选编译,方便工程的模块化管理。
增加自定义编译开关
我们拿一个实际的例子来说:
我们想在自己的工程中增加一个新开关选项:hello, 如果这个开关被启用,会在target中添加特定的一些源码文件,但是这个开挂默认是不被启用的,需要通过配置xmake f --hello=true才会被链接和使用
并且使用的时候,需要定义一些特殊的宏定义:-DHELLO_TEST -DHELLO_ENABLE
那么我们开始进行xmake.lua修改,过程并不复杂:
在xmake.lua的头部通过option接口定义一个名叫hello的开关选项
```lua
--定义一个名叫hello的
继续阅读 »
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
继续阅读 »
本文主要介绍下xmake的整体架构设计,以及源码结构的布局和模块划分。
如果你想深度使用xmake,开发xmake插件、工程自定义脚本或者想为xmake贡献一些代码和特性,可以通过此本的介绍,对xmake项目整体有个大概的了解。,
源码地址:Github
顶层目录结构
bash
./xmake/
├── actions # 内建的一些基础task,用于基本的构建安装等操作
├── core # xmake的核心模块,提供最底层的实现支持
├── languages # 所有的语言相关特性支持和扩展,都在此目录下
├── modules # 内置的扩展模块,可用`import`导入使用
├── pack
继续阅读 »
在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()
继续阅读 »