此次更新,主要增强xmake lua
插件,支持交互式命令执行(read-eval-print, REPL)以及一些稳定性问题修复。
有时候在交互模式下,运行命令更加的方便测试和验证一些模块和api,也更加的灵活,不需要再去额外写一个脚本文件来加载。
我们先看下,如何进入交互模式:
# 不带任何参数执行,就可以进入
$ xmake lua
>
# 进行表达式计算
> 1 + 2
3
# 赋值和打印变量值
> a = 1
> a
1
# 多行输入和执行
> for _, v in pairs({1, 2, 3}) do
>> print(v)
>> end
1
2
3
xmake的描述语法基于lua实现,因此描述语法继承了lua的灵活性和简洁性,并且通过28原则,将描述作用域(简单描述)、脚本作用域(复杂描述)进行分离,使得工程更加的简洁直观,可读性非常好。
因为80%的工程,并不需要很复杂的脚本控制逻辑,只需要简单的几行配置描述,就可满足构建需求,基于这个假设,xmake分离作用域,使得80%的xmake.lua
文件,只需要这样描述:
target("demo")
set_kind("binary")
add_files("src/*.c")
而仅有的20%的工程,才需要这样描述:
target("demo")
set_kind("shared")
set_objectdir("$(buildir)/.objs")
set_targetdir("libs/armeabi")
add_files("jni/*.c")
on_package(function (target)
os.run("ant debug")
end)
on_install(function (target)
os.run("adb install -r ./bin/Demo-debug.apk")
end)
on_run(function (target)
os.run("adb shell am start -n com.demo/com.demo.DemoTest")
os.run("adb logcat")
end)
上面的function () end
部分属于自定义脚本域,一般情况下是不需要设置的,只有在需要复杂的工程描述、高度定制化需求的情况下,才需要自定义他们,在这个作用域可以使用各种xmake提供的扩展模块,关于这个的更多介绍,见:xmake 描述语法和作用域详解。
而上面的代码,也是一个自定义混合构建jni和java代码的android工程,可以直接通过xmake run
命令,实现一键自动构建、安装、运行apk程序。
下面介绍一些比较常用的xmake描述实例:
此次更新,主要修复xmake的一些稳定性问题,并且对安装和卸载提供更加安全的权限处理,相关更新细节见:改进权限问题,提升操作安全性
并且此版本还对用户使用上的体验进行了一些优化,例如:
xmake.lua
时提供更加友好的提示,避免误操作详细更新信息,可参考下面的更新细节:
set_default
接口用于修改默认的构建所有targets行为xmake
命令进行构建,xmake会自动检测所在的工程根目录add_rpathdirs
api到target和option,支持动态库的自动加载运行xmake install
and xmake uninstall
任务,更友好的处理root安装问题rpm
, deb
和osxpkg
安装包xmake.lua
时,添加更友好的用户提示,避免用户无操作最近对xmake的操作权限进行了升级,提供更加安全的命令操作,例如:
xmake install
和xmake uninstall
命令,提供更加安全地安装和卸载支持之前的xmake install
和xmake uninstall
行为,是自动build
后进行安装,而大部分情况下安装目录是在/usr/local
目录下。
因此,需要root权限才能写入,那么之前的方式只能暴力地直接加上sudo xmake install
来执行。
可想而知,虽然安装确实成功了,但是由于默认的自动构建行为,导致生成的临时*.o
, *.a
等各种文件都具备了root权限,而且一个不小心就会覆盖系统的一些库文件。
因此,为了避免这个问题,xmake改进了安装逻辑,将build
和install
分离成两个独立的阶段,分别使用不同的权限,并且提供更加友好的提示信息,例如:
此版本主要增强了vs201x工程的生成,以及支持vs2017编译环境,并且针对archlinux提供更加方便的aur安装。
详细更新内容如下:
yaourt
包管理器进行安装。