xmake v2.5.4 发布,支持 apt/portage 包管理器,改进 xrepo shell 环境

2021-05-18 11:26:32 浏览数 (1)

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:

代码语言:javascript复制
$ 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

代码语言:javascript复制
$ 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_hset_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 工具链

0 人点赞