首先我们通过内置的工程模板创建一个空工程:
$ xmake create -P ./hello
create hello ...
create ok!👌
这个时候xmake将会产生一些工程文件,如下:
$ cd ./hello
$ tree .
.
├── src
│ └── main.c
└── xmake.lua
这个简单的程序仅仅只是为了打印输出: hello xmake!
$ cat ./src/main.c
#include <stdio.h>
int main(int argc, char** argv)
{
printf("hello xmake!\n");
return 0;
}
xmake.lua
是基于lua语法的工程描述文件,它很简单:
$ cat xmake.lua
target("hello")
set_kind("binary")
add_files("src/*.c")
xmake在开发插件脚本的时候,除了可以使用lua内置的print进行终端输出外,还可以通过另外一个接口:cprint
实现终端的色彩高亮输出
例如:
cprint('${bright}hello xmake')
cprint('${red}hello xmake')
cprint('${bright green}hello ${clear}xmake')
cprint('${blue onyellow underline}hello xmake${clear}')
cprint('${red}hello ${magenta}xmake')
cprint('${cyan}hello ${dim yellow}xmake')
显示结果如下:
为了进一步提升构建效率,减少没必要的重建,xmake新增了对头文件的依赖检测,以及自动构建仅仅需要重新编译的源文件,提升编译速度,并且完全支持windows、linux、macosx等大部分平台。。
由于检测过程本身也会有一些性能损耗,因此xmake对此进行了深度优化,实现极速依赖检测:
对依赖头文件进行过滤,如果是系统头文件,非自身项目的第三方头文件,自动忽略,这些头文件基本上不会再开发项目的时候,经常变动,所以没必要去每次检测他们,如果真有变动,手动重建下就行了
针对每个头文件的检测结果进行缓存,直接应用到下一个源文件上,减少重复检测的次数
其他一些细节优化
xmake通过import接口,可以在自定义脚本中导入各种内置类库和扩展类库模块,使得xmake的插件开发具有更多的灵活性,提供更丰富的功能。
我们先看下,目前xmake提供的一些类库:
xmake里面的lua脚本加载插件,可以让你方便调试和编写一些自定义的lua脚本,这个时候xmake就是一个纯lua的加载引擎。。
例如,我想写个简单的hello xmake!
的lua脚本,可以自己建个 hello.lua
文件,编写如下脚本:
function main()
print("hello xmake!")
end
main
是入口函数,就跟平常写c类似,然后加载执行下这个lua脚本就行了:
xmake lua /home/xxx/hello.lua
or xmake l /tmp/hello.lua
下面在来个稍微高级点的,我要传递参数进来,可以这么写:
function main(argv)
-- 打印所有参数值
for _, value in ipairs(argv) do
print(value)
end
-- 或者可以直接dump所有
table.dump(argv)
end
然后我们执行下,试试:
xmake lua /tmp/hello.lua hello xmake
简单吧,当然除了lua内置的大部分模块,例如:os, string, table, ...
等等,xmake的lua加载器还提供其他更丰富的模块类库
可以通过 import
导入后使用,所有导入的模块支持跟插件开发中使用的类库是一样的,具体类库的使用,请参考:插件开发之类库使用
下面我主要介绍下,xmake lua
插件提供的一些内置shell脚本,这些脚本是linux下的一些shell工具子集,用于实现跨平台执行,例如:
xmake lua cat
xmake lua cp
xmake lua echo
xmake lua mv
xmake lua rm
xmake lua rmdir
xmake lua mkdir
现在提供的工具不是很多,但是以后可以慢慢扩充,扩展起来还是很方便的,只需要把对应脚本:cat.lua
放到 xmake lua
插件目录的 scripts 目录下就行了。。
例如我想要跨平台运行 cat 命令,可以这么执行:
xmake lua cat /tmp/a
or xmake l cat c:\\a.txt
等以后工具扩充的越来越多,相当于在各个平台下,有了一套完善的linux的shell工具,方便日常开发使用
如果你想要看下xmake当前版本支持了哪些内置的shell工具,可以执行:
xmake lua -l
or xmake lua --list