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 也有自己原生内置的包管理工具,完全无任何依赖。
luarocks 是 lua 的一个包管理工具,提供了各种 lua 模块的安装集成,在用户安装 lua 模块的过程中,它会使用内置的构建系统对 c/c++ 模块进行构建。
但是,它的构建系统只提供简单的配置,对于复杂的 c/c++ 模块的,就有点力不从心了,并且也无法灵活配置切换工具链。
尽管它也提供了 make 和 cmake 的构建后端支持,但是通过 makefile 方式维护同样不够灵活,而 cmake 需要用户自己提前安装好 cmake 工具,否则安装 lua 模块的时候就会被打断。
这里,我实现了一个基于 xmake 构建系统来构建 lua c/c++ 模块的 luarocks 插件 luarocks-build-xmake,来实现更加灵活方便的 lua 模块维护。
相比 luarocks 内建的构建系统,它提供了更加强大的构建配置,支持 c/c++ 依赖管理,相比 cmake 它不需要用户手动安装 xmake,此插件会自动安装 xmake 后,直接编译 lua 模块,对用户来讲,不需要做额外的操作。
如果模块工程中使用了 xmake.lua 来维护构建,那么我们可以直接使用 xmake 去构建它,rockspec 文件中不需要额外的配置构建规则。
├── src
│ ├── test.c
│ └── test.h
└── xmake.lua
我们需要使用 add_rules("luarocks.module")
添加针对 luarocks 模块构建规则。
add_rules("mode.debug", "mode.release")
target("example1.hello")
add_rules("luarocks.module")
add_files("src/test.c")
package = "example1"
version = "1.0-1"
source = {
url = "git://github.com/xmake-io/luarocks-build-xmake",
tag = "example1"
}
dependencies = {
"lua >= 5.1",
"luarocks-build-xmake"
}
build = {
type = "xmake",
copy_directories = {}
}
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
这是 xmake 在今年的首个版本,也是完全适配支持 Apple Silicon (macOS ARM) 设备的首个版本。
这个版本,我们主要改进了对 C/C++ 依赖包的集成支持,更加的稳定,并且能够更加灵活的实现定制化配置编译。
另外,我们还重点改进 vs/vsxmake 两个vs工程生成器插件,修复了很多细节问题,并且对子工程分组
也做了支持,现在可以生成类似下图的工程结构。
关于 Zig 方面,0.7.1 版本修复了很多我之前反馈的问题,现在 xmake 也已经可以很好的支持对 zig 项目的编译。
同时,我们还新开发了一个 luarocks=build-xmake 插件去用 xmake 替换 luarocks 内置的构建系统。
最后,在这个版本中,我们继续改进了 xmake f --menu
图形化配置菜单,完全支持鼠标操作和滚动支持,也对 utf8 做了支持。
2020 年,xmake 总共迭代发布了9个版本,新增了 1871 commits,1k+ stars,新增处理了 500+ 的 issues/pr。
还不知道 xmake 是什么的同学,这里先做个简单的介绍:
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
虽然,简单易用是 xmake 的一大特色,但 xmake 的功能也是非常强大的,既能够像 Make/Ninja 那样可以直接编译项目,也可以像 CMake/Meson 那样生成工程文件,还有内置的包管理系统来帮助用户解决 C/C++依赖库的集成使用问题。
目前,xmake主要用于C/C++项目的构建,但是同时也支持其他native语言的构建,可以实现跟C/C++进行混合编译,同时编译速度也是非常的快,可以跟Ninja持平。
5年了,终于破100了(好悲催~),但相比去年已经算是有了很大的增长,每天最多有 113 人,304 个工程在使用 xmake 进行构建。
今年还上线了一门 xmake 相关的入门课程:Xmake 带你轻松构建 C/C++ 项目
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
我们可以用 xmake 很方便的开发构建 C/C++ 项目,同时也支持和其他 native 语言的混合编译。
近期,我们还新增了一个基于 xmake 的独立子命令:xrepo,一个完整独立的跨平台 C/C++ 包管理器,便于用户更加方便的管理日常 C/C++ 包的安装和集成使用。
关于 xmake 和 xrepo 的进一步了解和使用可以参考下面的链接。
Discord (discord.com) 是一个非常不错的全端即时交流平台,我们在上面创建了中文和英文两个不同的频道,界面大概长这样。
最近,我们在 Discord 上新创建了 xmake 技术交流频道,欢迎大家加入。
对 xmake 感兴趣的朋友可以点击 服务器邀请链接 加入我们的频道,当然话题仅限于 xmake 相关项目。
另外,在 xmake 支持 Zig Language 项目编译的过程中,我们也有幸邀请到了 Zig 作者 Andrewrk 进入我们的社区频道。
另外,xmake 还有在其他平台的创建交流社区,大家可以使用平常最常用的交流平台进行技术交流。
也欢迎关注我们的微信公众号:tboox-os,不定期获取 xmake 的相关资讯和技术文章。