Xmake v2.7.8 发布,改进包虚拟环境和构建速度

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

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

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

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

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

Xmake = Build backend + Project Generator + Package Manager + [Remote|Distributed] Build + Cache

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

Xmake ≈ Make/Ninja + CMake/Meson + Vcpkg/Conan + distcc + ccache/sccache

新特性介绍

快速切换临时虚拟环境

Xmake 很早就支持了包的虚拟环境管理,可以通过配置文件的方式,实现不同包环境之间的切换。

我们可以通过在当前目录下,添加 xmake.lua 文件,定制化一些包配置,然后进入特定的包虚拟环境。

add_requires("zlib 1.2.11")
add_requires("python 3.x", "luajit")
$ xrepo env shell
> python --version
> luajit --version

也可以通过导入自定义环境配置文件,来切换环境:

$ xrepo env --add /tmp/base.lua
$ xrepo env -b base shell

而在新版本中,我们进一步做了改进,让 Xrepo 能够直接在命令行临时指定需要绑定的环境包列表,实现快速切换,无需任何配置。

并且支持同时指定多个包环境。

例如,我们想进入一个带有 python 3.0, luajit 和 cmake 的环境,只需要执行:

$ xrepo env -b "python 3.x,luajit,cmake" shell
[python,luajit,cmake] $ python --version
Python 3.10.6
[python,luajit,cmake] $ cmake --version
cmake version 3.25.3

Xmake 会自动安装相关依赖,然后开启一个新的 shell 环境,新环境终端左边也有 prompt 提示。

如果我们想退出当前环境,仅仅需要执行

[python,luajit,cmake] $ xrepo env quit
$

改进代码特性检测

has_cfuncs/check_cxxsnippets 等系列检测接口,在 option 中已经有提供,并且有对应的辅助 API 来帮助检测。

相关文档可以参考:辅助检测接口

但是目前 option 提供的检测接口仅仅针对全局平台工具链,无法根据每个特定的 target 配置在针对性做一些检测。

因为 target 本身可能还会附带依赖包,不同的工具链,编译宏等差异性,检测结果也会有一些差异。

因此,如果用户想要更加灵活细粒度的检测每个 target 目标的编译特性,可以通过新版本提供的 target 目标实例接口。

  • target:has_cfuncs
  • target:has_cxxfuncs
  • target:has_ctypes
  • target:has_cxxtypes
  • target:has_cincludes
  • target:has_cxxincludes
  • target:has_cflags
  • target:has_cxxflags
  • target:has_features
  • target:check_csnippets
  • target:check_cxxsnippets

这里,仅仅针对其中一些比较常用的接口,稍微展开介绍下使用方式。

target:has_cfuncs
  • 检测目标编译配置能否获取给定的 C 函数

这应该在 on_config 中使用,比如可以用它来判断当前目标能否获取到 zlib 依赖包的一些函数接口,然后自动定义 HAVE_INFLATE

add_requires("zlib")
target("test")
    set_kind("binary")
    add_files("src/*.c")
    add_packages("zlib")
    on_config(function (target
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值