xmake v2.5.2 发布, 支持自动拉取交叉工具链和依赖包集成

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

在 2.5.2 版本中,我们增加了一个重量级的新特性:自动拉取远程交叉编译工具链

这是用来干什么的呢,做过交叉编译以及有 C/C++ 项目移植经验的同学应该知道,折腾各种交叉编译工具链,移植编译项目是非常麻烦的一件事,需要自己下载对应工具链,并且配置工具链和编译环境很容易出错导致编译失败。

现在,xmake 已经可以支持自动下载项目所需的工具链,然后使用对应工具链直接编译项目,用户不需要关心如何配置工具链,任何情况下只需要执行 xmake 命令即可完成编译。


甚至对于 C/C++ 依赖包的集成,也可以自动切换到对应工具链编译安装集成,一切完全自动化,完全不需要用户操心。

除了交叉编译工具链,我们也可以自动拉取工具链,比如特定版本的 llvm,llvm-mingw, zig 等各种工具链来参与编译 C/C++/Zig 项目的编译。

即使是 cmake 也还不支持工具链的自动拉取,顶多只能配合 vcpkg/conan 等第三方包管理对 C/C++ 依赖包进行集成,另外,即使对于 C/C++依赖包,xmake 也有自己原生内置的包管理工具,完全无任何依赖。

新特性介绍

自动拉取远程交叉编译工具链

从 2.5.2 版本开始,我们可以拉取指定的工具链来集成编译项目,我们也支持将依赖包切换到对应的远程工具链参与编译后集成进来。

相关例子代码见:Toolchain/Packages Examples

相关的 issue #1217

当前,我们已经在 xmake-repo 仓库收录了以下工具链包,可以让 xmake 远程拉取集成:

  • llvm
  • llvm-mingw
  • gnu-rm
  • muslcc
  • zig

虽然现在支持的工具链包不多,当但是整体架构已经打通,后期我们只需要收录更多的工具链进来就行,比如:gcc, tinyc, vs-buildtools 等工具链。

由于 xmake 的包支持语义版本,因此如果项目依赖特定版本的 gcc/clang 编译器,就不要用户去折腾安装了,xmake 会自动检测当前系统的 gcc/clang 版本是否满足需求。

如果版本不满足,那么 xmake 就会走远程拉取,自动帮用户安装集成特定版本的 gcc/clang,然后再去编译项目。

拉取指定版本的 llvm 工具链

我们使用 llvm-10 中的 clang 来编译项目。

add_requires("llvm 10.x", {
   alias = "llvm-10"})
target("test")
    set_kind("binary")
    add_files("src/*.c)
    set_toolchains("llvm@llvm-10")

其中,llvm@llvm-10 的前半部分为工具链名,也就是 toolchain("llvm"),后面的名字是需要被关联工具链包名,也就是 package("llvm"),不过如果设置了别名,那么会优先使用别名:llvm-10

另外,我们后续还会增加 gcc 工具链包到 xmake-repo,使得用户可以自由切换 gcc-10, gcc-11 等特定版本的 gcc 编译器,而无需用户去手动安装。

拉取交叉编译工具链

我们也可以拉取指定的交叉编译工具链来编译项目。

add_requires("muslcc")
target("test")
    set_kind("binary")
    add_files("src/*.c)
    set_toolchains("@muslcc")

muslcc 是 https://musl.cc 提供的一款交叉编译工具链,默认 xmake 会自动集成编译 x86_64-linux-musl- 目标平台。

当然,我们也可以通过 xmake f -a arm64 切换到 aarch64-linux-musl- 目标平台来进行交叉编译。

拉取工具链并且集成对应工具链编译的依赖包

我们也可以使用指定的muslcc交叉编译工具链去编译和集成所有的依赖包。

add_requires("muslcc")
add_requires("zlib", "libogg", {
   system = false})

set_toolchains("@muslcc")

target("test")
    set_kind("binary")
    add_files("src/*.c")
    add_packages("zlib", "libogg")

这个时候,工程里面配置的 zlib, libogg 等依赖包,也会切换使用 muslcc 工具链,自动下载编译然后集成进来。

我们也可以通过 set_plat/set_arch 固定平台,这样只需要一个 xmake 命令,就可以完成整个交叉编译环境的集成以及架构切换。

add_requires("muslcc")
add_requires("zlib", "libogg", {
   system = false})

set_plat("cross")
set_arch("arm64")
set_toolchains("@muslcc")

target("test")
    set_kind("binary")
    add_files("src/*.c")
    add_packages("zlib", "libogg")

完整例子见:Examples (muslcc)

拉取集成 Zig 工具链

xmake 会先下载特定版本的 zig 工具链,然后使用此工具链编译 zig 项目,当然用户如果已经自行安装了 zig 工具链,xmake 也会自动检测对应版本是否满足,如果满足需求,那么会直接使用它,无需重复下载安装。

add_rules("mode.debug", "mode.release")
add_requires("zig 0.7.x")

target("test")
    set_kind("binary")
    add_files("src/*.zig")
    set_toolchains("@zig")

增加对 zig cc 编译器支持

zig cc 是 zig 内置的 c/c++ 编译器,可以完全独立进行 c/c++ 代码的编译和链接,完全不依赖 gcc/clang/msvc,非常给力。

因此,我们完全可以使用它来编译 c/c++ 项目,关键是 zig 的工具链还非常轻量,仅仅几十M 。

我们只需要切换到 zig 工具链即可完成编译:

$ xmake f --toolchain=zig
$ xmake
[ 25%]: compiling.release src/main.c
"zig cc" -c -arch x86_64 -fvisibility=hidden -O3 -DNDEBUG -o build/.objs/xmake_test/macosx/x86_64/release/src/main.c.o src/main.c
[ 50%]: linking.release test
"zig c++" -o build/macosx/x86_64/release/test build/.objs/xmake_test/macosx/x86_64/release/src/main.c.o -arch x86_64 -st
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值