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 环境。
- 项目源码
- 官方文档
- 入门课程
新特性介绍
新的包管理器支持
添加 ubuntu/apt 的依赖包
现在我们支持使用 apt 集成依赖包,也会自动查找 ubuntu 系统上已经安装的包。
代码语言:javascript复制add_requires("apt::zlib1g-dev", {alias = "zlib"})
target("test")
set_kind("binary")
add_files("src/*.c")
add_packages("zlib")
添加 gentoo/portage 的依赖包
我们也支持了使用 Portage 集成依赖包,并且也会自动查找 Gentoo 系统上已经安装的包。
代码语言:javascript复制add_requires("portage::libhandy", {alias = "libhandy"})
target("test")
set_kind("binary")
add_files("src/*.c")
add_packages("libhandy")
从 Vcpkg 集成 arm/arm64 架构包
代码语言:javascript复制add_requires("vcpkg::zlib", {alias = "zlib"})
target("test")
set_kind("binary")
add_files("src/*.c")
add_packages("zlib")
配置方式还是跟之前的相同,只需要切换到 arm/arm64 架构编译就可以自动从 Vcpkg 拉取 arm/arm64 的包。
代码语言:javascript复制$ xmake f -a arm64
$ xmake
支持导入导出安装包
通常,我们使用 xrepo 命令或者 xmake 去安装完包后,如果相同的项目迁移到其他机器编译,那就要重新下载安装包。
为了提高开发效率,现在 xrepo 可以快速导出已经安装后的包,包括对应的库文件,头文件等等。
代码语言:javascript复制$ xrepo export -o /tmp/output zlib
然后我们也可以在其他机器上导入之前导出的安装包,实现包的迁移。
代码语言:javascript复制$ xrepo import -i /xxx/packagedir zlib
导入后,对应项目编译会直接使用它们,不再额外重新安装包。
特定包 shell 环境支持
xrepo 有个 xrepo env
命令,可以指定加载特定包的环境,然后运行特定程序,例如加载 luajit 包的安装环境,然后运行 luajit:
$ xrepo env luajit
或者绑定特定 luajit 版本包环境,加载 bash 后,就可以直接运行对应的 lujit。
代码语言:javascript复制$ xrepo env -b "luajit 5.1" bash
> luajit --version
但是,这样有个问题,如果我们安装的包很多,不同的包配置和版本都还不同,如果我们想加载一个 bash,并且同时带有多个包的环境。
那么,之前的方式就无法支持了,因此,新版本中,我们对其进一步改进,是的可以通过在当前目录下,添加 xmake.lua 文件,定制化一些包配置,然后进入特定的包 shell 环境。
xmake.lua
代码语言:javascript复制add_requires("zlib 1.2.11")
add_requires("python 3.x", "luajit")
比如上面这样,我们通过在 xmake.lua 中配置了三个包,想在 shell 中同时使用它们,那么只需要在当前目录下运行下面的命令就行了。
代码语言:javascript复制$ xrepo env shell
> python --version
> luajit --version
需要注意的是,这里我们使用了 xrepo env shell
而不是 xrepo env bash
,是因为 bash 只能在特定平台使用,而 xrepo env shell
属于内置命令。
它可以自动检测当前用的终端环境,加载对应的 bash, sh, zsh 以及 windows 下的 cmd 或者 powershell 环境,这一切都是自动的。
另外,我们还加了一些辅助特性,比如 prompt 提示,xrepo env quit
环境退出命令,历史输入命令切换等等。
设置镜像加速包下载
为了改进国内网络环境下载包慢的问题,xmake 是支持代理设置的,还可以支持 pac.lua 代理配置策略。
而新版本中,我们对 pac.lua 配置进行了改进,进一步支持配置镜像代理规则,比如对所有 github.com 域名的访问切到 hub.fastgit.org 域名,实现加速下载包。
pac.lua 配置:
代码语言:javascript复制function mirror(url)
return url:gsub("github.com", "hub.fastgit.org")
end
然后我们设置次 pac.lua 文件,默认路径在 ~/.xmake/pac.lua
。
$ xmake g --proxy_pac=/tmp/pac.lua
然后,我们安装包的时候,如果遇到 github.com 域名下的包源,下载时候会自动切到 fastgit 镜像加速下载。
代码语言:javascript复制$ xrepo install libpng
> curl https://hub.fastgit.org/glennrp/libpng/archive/v1.6.37.zip -o v1.6.37.zip
自定义切换包存储目录
之前我们只能通过 xmake g --pkg_installdir=/tmp/xx
来配置修改默认的包安装目录。
现在,我们也可以通过 XMAKE_PKG_INSTALLDIR
环境变量也修改它,默认路径在:~/.xmake/packages
。
另外,我们还额外添加了 XMAKE_PKG_CACHEDIR
环境变量来修改包的缓存目录,默认路径在:~/.xmake/cache/packages
。
更新内容
新特性
- #1323: 支持从 apt 查找安装包,
add_requires("apt::zlib1g-dev")
- #1337: 添加环境变量去改进包安装和缓存目录
- #1338: 支持导入导出已安装的包
- #1087: 添加
xrepo env shell
并且支持从add_requires/xmake.lua
加载包环境 - #1313: 为
add_requires/add_deps
添加私有包支持 - #1358: 支持设置镜像 url 站点加速包下载
- #1369: 为 vcpkg 增加 arm/arm64 包集成支持,感谢 @fallending
- #1405: 添加 portage 包管理器支持,感谢 @Phate6660
改进
- 改进
find_package
并且添加package:find_package
接口在包定义中方便查找包 - 移除废弃的
set_config_h
和set_config_h_prefix
接口 - #1343: 改进搜索本地包文件
- #1347: 针对 binary 包改进 vs_runtime 配置
- #1353: 改进 del_files() 去加速匹配文件
- #1349: 改进 xrepo env shell 支持,更好的支持 powershell
Bugs 修复
- #1380: 修复
add_packages()
失败问题 - #1381: 修复添加本地 git 包源问题
- #1391: 修复 cuda/nvcc 工具链