Xmake v2.8.2 发布,官方包仓库数量突破 1k

Xmake是一个基于 Lua 的轻量级跨平台构建工具。

它非常的轻量,没有任何依赖,因为它内置了 Lua 运行时。

它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。

我们能够使用它像 Make/Ninja 那样可以直接编译项目,也可以像 CMake/Meson 那样生成工程文件,另外它还有内置的包管理系统来帮助用户解决 C/C++ 依赖库的集成使用问题。

目前,Xmake 主要用于 C/C++ 项目的构建,但是同时也支持其他 native 语言的构建,可以实现跟 C/C++ 进行混合编译,同时编译速度也是非常的快,可以跟 Ninja 持平。

尽管不是很准确,但我们还是可以把 Xmake 按下面的方式来理解:

新特性介绍

这个版本,我们新增了不少实用的 API,并且移除了一些几年前就被标记为废弃的接口,另外改进了动态库对 soname 的支持。

同时,在这期间,我们迎来了一些喜人的数据,我们的xmake-repo官方仓库包的数量也突破了 1k,非常感谢 Xmake 的每位贡献者,我们的包仓库基本上都是社区贡献者贡献进来的。

尤其是 @xq114, @star-hengxing, @SirLynix 帮忙贡献了大量的包,非常感谢~

还有,Xmake 仓库 Commits 也突破到了 12k,一直在持续快速迭代中。下面我们简单介绍下,新版本中的一些主要更新内容。

增加 soname 支持

新版本中,我们对set_version接口新增了 soname 版本支持,用于控制 so/dylib 动态库的版本兼容性控制。

我们可以配置 soname 的版本后缀名称,xmake 会在编译、安装动态库的时候,自动生成符号链接,执行指定版本的动态库。

例如,如果我们配置:

xmake 会自动解析版本号的 major 版本作为 soname 版本,生成的结构如下:

当然,我们也可以指定 soname 到特定的版本命名:

而如果没设置 soname,那么默认不开启 soname 版本兼容控制:

改进 add_vectorexts 接口

add_vectorexts 接口主要用于添加扩展指令优化选项,目前支持以下几种扩展指令集:

其中,avx512,sse4.2是我们新版本新增的指令配置,另外我们还新增了一个all配置项,可以用于尽可能的开启所有扩展指令优化。

新增 set_encodings 接口

这个新接口主要用于设置源文件、目标执行文件的编码。

默认情况下,我们仅仅指定编码,是会同时对源文件,目标文件生效。

它等价于:

并且,目前仅仅支持设置成 utf-8 编码,将来会不断扩展。

如果,我们仅仅想单独设置源文件编码,或者目标文件编码,也是可以的。

通常指的是编译的代码源文件的编码,我们可以这么设置。

它通常指的是目标可执行文件的运行输出编码。

新增 add_forceincludes 接口

我们还新增了add_forceincludes接口,用于在配置文件中直接强制添加includes头文件。

它的效果类似于#include <config.h>,但是不需要在源码中显式添加它了。

另外,它的搜索路径也是需要通过add_includedirs来控制,而不是直接配置文件路径。

默认add_forceincludes匹配 c/c++/objc。如果仅仅只想匹配 c++ 可以这么配置:

如果想同时匹配多个源文件类型,也是可以的:

对于 gcc,它会设置-include config.h标志,对于 msvc,它会设置-FI config.h标志。

新增 add_extrafiles 接口

在之前的版本中,如果我们要在 vs/vsxmake 工程生成器中添加一些额外的文件到工程列表中去,只能通过add_headerfiles来添加,但是这有一点 Hack。

因此,我们新增了add_extrafiles接口,专门用于配置一些额外的文件到工程中,这样,用户也可以快速点击编辑它们。

这些被添加文件不是代码文件,不会参与编译,也不会被安装,仅仅只是能够让用户方便的在生成的工程 IDE 中,快速编辑访问它们。

将来,我们也可能用此接口做更多其他的事情。

sdasstm8 汇编器支持

@lanjackg2003 帮忙贡献了 sdcc/sdasstm8 汇编器的支持,非常感谢。

相关 patch,#4071

改进 Rust 交叉编译支持

新版本中,我们还对 Rust 项目构建做了改进,新增了交叉编译支持,包括对依赖包的交叉编译。

例如上面的项目配置,我们通过set_arch("aarch64-unknown-none")全局修改编译架构,就能对依赖包,以及自身项目进行交叉编译。

如果没有配置set_arch,我们也可以通过命令xmake f -a aarch64-unknown-none; xmake来动态切换编译架构。

当然,别忘了先得执行rustup target add aarch64-unknown-none安装对应的 target 才行。

更多上下文,见:#4049

更新日志

新特性

改进

Bugs 修复

未经允许不得转载:岩猫星空网 » Xmake v2.8.2 发布,官方包仓库数量突破 1k