xmake使用札记

380 阅读1分钟

用了一段时间xmake,确实感觉不错,诚如作者所说,新项目完全可以平替cmake了。用的过程中发现一些坑,在此记录下来。

自动生成编译数据库文件

使用cmake时,可以通过在原先使用cmake命令的地方修改成cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1生成对应的compile_commands.json。在xmake中同样可以通过xmake project -k compile_commands来独立生成对应的文件。

tip: 还可以通过xmake project -k 生成一些别的文件,如cmake的CMakeLists.txt, make的Makefile等。完整功能参见xmake project --help

在cmake中,如果我们希望自动更新编译数据库而不是通过命令行指定,则可以通过在顶层的CMakeLists.txt中添加set(CMAKE_EXPORT_COMPILE_COMMANDS 1)。在xmake中,我们通用可以在xmake.lua中添加add_rules("plugin.compile_commands.autoupdate")

tip: 如何查看已有的rules呢?可以通过xmake show -l rules进行。

run之前自动调用build

这个在cargo中很常见,cargo run一定会调用cargo build。对于xmake,xmake run默认不调用xmake build。那么如何调整成依赖xmake build呢?目前需要最新版的xmake支持。方案如下:

# 更新xmake到最新版
xmake update
# 确认xmake版本
$ xmake --version

之后,在xmake.lua中添加set_policy("run.autobuild", true)

tip: 如何查看已有的policies呢?可以通过xmake show -l policies进行。

使用luals处理xmake.lua

我们知道,xmake.lua使用lua语法来配置。但是,由于xmake自定义了一些内置的函数,这使得普通的lua运行时无法识别这些内置函数。这该怎么办呢?官方的解决方案是使用xmake-vscode插件;好用是好用,但局限性是显然的:它只支持vscode,且不能利用好已有的luals。更好的办法是使用LLS-Addons。 LLS-Addons的原理很简单:通过配置.luarc.json来添加第三方库的路径,然后luals提供机制去解析对应的库的路径。luals官方提供了对vscode的支持:LLS Addon Manager,它所做的就是把Addons下载到指定的位置然后在settings.json中配置了Lua.workspace.library,这完全使用vscode的图形化界面就可以了。如果使用非vscode的IDE/Editor,则按照下面的方式进行。

# 克隆Addons
export LLS_ADDONS_DIR=/path/to/lls
git clone git@github.com:LuaLS/LLS-Addons.git $LLS_ADDONS_DIR
cd $LLS_ADDONS_DIR
# 克隆xmake的submodule
git submodule update --init --remote addons/xmake/module

接着我们要做的是,在包含xmake.lua的目录下配置.luars.json。

{
  "workspace.library": ["/path/to/lls"],
  "runtime.version": "Lua 5.4",
  "hint.enable": true
}

重新打开xmake.lua,这时候就可以使用luals了。

需要注意的是,这个LLS-Addons的方案可以应用于其他第三方基于lua的应用,如openresty、lualatex等等,具体可参见addons目录;使用起来,只需要克隆对应的submodule然后配置即可。此外,新建addons也不复杂。