xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
2.5.5 版本中,我们继续改进远程包集成的体验,实现在云端预编译包,然后直接下载集成预编译的二进制包。这对于一些编译非常慢的包,可以极大的减少包的安装时间。
另外,新版本中,我们还重新实现了新版的本地包生成方案,完全无缝支持 add_requires
和 add_packages
,从此远程包和本地包可以使用统一的集成方式来维护。
之前 xmake 内置的包管理器每次安装包,都必须下载对应的包源码,然后执行本地编译安装集成,这对于一些编译非常慢的大包,以及一些依赖的编译工具非常多的包,安装起来会非常的慢。
尤其是在 windows 上,不仅三方包对编译环境的依赖更加复杂,而且很多打包编译非常慢,例如:boost, openssl 等等。
为此,我们基于 github action 实现对包的云端预编译,会将常用配置的包都去预编译一遍,然后存储到 build-artifacts 仓库的 Releases 下。
然后,我们在安装包的时候,会自动从二进制镜像包源下载,实现快速集成(目前仅支持预编译 windows 包,后期会逐步放开到其他平台)。
我们会预编译每个包的 plat/arch/MT/MD/static/shared 等各种配置组合,根据唯一的 buildhash 来精确拉取用户实际需要的包,所有的编译产物都会用 7zip 压缩打包,如下图:
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
在 2.5.4 版本中,我们新增了对 Apt、Portage 这两个包管理器的支持,在 Ubuntu/Gentoo 上我们也可以使用 add_requires
可以快速集成它们提供的包。
并且我们也改进支持了 Vcpkg 包管理器的支持,新增对 arm/arm64 架构包的安装支持。
另外,我们还增强了 xrepo env shell
环境,可以通过在 xmake.lua
中配置一系列 add_requires
包配置,加载带有特定包配置的 shell 环境。
现在我们支持使用 apt 集成依赖包,也会自动查找 ubuntu 系统上已经安装的包。
add_requires("apt::zlib1g-dev", {alias = "zlib"})
target("test")
set_kind("binary")
add_files("src/*.c")
add_packages("zlib")
我们也支持了使用 Portage 集成依赖包,并且也会自动查找 Gentoo 系统上已经安装的包。
add_requires("portage::libhandy", {alias = "libhandy"})
target("test")
set_kind("binary")
add_files("src/*.c")
add_packages("libhandy")
XMake 是一个基于 Lua 的 现代化 C/C++ 构建系统。
它的语法简洁易上手,对新手友好,即使完全不会 lua 也能够快速入门,并且完全无任何依赖,轻量,跨平台。
同时,它也是一个自满足的构建系统,拥有强大的包管理系统,快速的构建引擎。
相比 Ninja/Scons/Make 作为 Build backend,CMake/Meson 作为 Project Generator,那么 XMake 就是这两者外加一个包管理。
xmake = Build backend + Project Generator + Package Manager
因此,只需要安装一个不到 3M 的 XMake 安装包,你就可以不用再安装其他各种工具,甚至连 make 都不需要安装,也不需要安装 Python、Java 等重量级的运行时环境,就可以开始您的 C/C++ 开发之旅。
也许,有人会说,编译器总需要安装的吧。这也不是必须的,因为 XMake 的包管理也支持自动远程拉取需要的各种编译工具链,比如:llvm, Mingw, Android NDK 或者交叉编译工具链。
每当在 Reddit 社区跟别人讨论起 XMake,大家总是会拿下面这张图来吐槽。
尽管有些无奈,也被吐槽的有些麻木了,不过我还是想说明下,做 XMake 的初衷,并不是为了分裂 C/C++ 生态,相反,XMake 尽可能地复用了现有生态。
同时也让用户在开发 C/C++ 项目的时候,拥有与其他语言一样的良好体验,比如:Rust/Cargo,Nodejs/Npm, Dlang/Dub,不再为到处找第三包,研究如何移植编译而折腾。
因此,如果您还不了解 XMake,请不要过早下定论,可以先尝试使用下,或者花点时间看完下文的详细介绍。
经常有人问我 XMake 有什么特别之处,相比现有 CMake、Meson 此类构建工具有什么优势,我为什么要使用 XMake 而不是 CMake?
先说特点和优势,XMake 有以下几点:
中科院软件所与华为 openEuler 社区去年共同举办了 “开源软件供应链点亮计划——暑期2020” 活动,今年为第二届。该活动旨在鼓励大家关注开源软件和开源社区,致力于培养和发掘更多优秀的开发者。
开源之夏网站:https://summer.iscas.ac.cn/
今年 Xmake 社区也报名参加了此活动,并且提供了三个活动项目,难易程度中等,欢迎大家一起参与进来,还有奖金可以领取哦。
Summer2021 活动为期 3 个月:
Mentor 负责指导报名的 Student 完成并达成预期的目标 达成目标后,活动主办方会给与 Mentor 和 Student 一定的奖励和资助 数额因项目难度和完成情况而略有差异,从 6000 - 12000 不等,具体情况以开源之夏活动官网为准,解释权归活动主办方所有
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
在 2.5.3 版本,我们新增了对 linux bpf 程序的构建支持,并且同时支持 android bpf 程序的构建。
尽管 bpf 对 编译工具链有一定的要求,比如需要较新的 llvm/clang 和 android ndk 工具链,但是 xmake 能够自动拉取特定版本的 llvm/ndk 来用于编译,并且还能自动拉取 libbpf 等依赖库,完全省去了用户折腾编译环境和 libbpf 库集成的问题。
另外,在新版本中我们还新增了对 Conda 包仓库的集成支持,现在除了能够从 Conan/Vcpkg/brew/pacman/clib/dub 等包仓库集成使用包,还能从 Conda 包仓库中集成各种二进制 C/C++ 包。