--- title: xmake v2.5.4 发布,支持 apt/portage 包管理器,改进 xrepo shell 环境 tags: [xmake, lua, C/C++, apt, portage, shell, package] date: 2021-05-15 author: Ruki outline: deep --- 在 2.5.4 版本中,我们新增了对 Apt、Portage 这两个包管理器的支持,在 Ubuntu/Gentoo 上我们也可以使用 `add_requires` 可以快速集成它们提供的包。 并且我们也改进支持了 Vcpkg 包管理器的支持,新增对 arm/arm64 架构包的安装支持。 另外,我们还增强了 `xrepo env shell` 环境,可以通过在 `xmake.lua` 中配置一系列 `add_requires` 包配置,加载带有特定包配置的 shell 环境。 * [项目源码](https://github.com/xmake-io/xmake) * [官方文档](https://xmake.io/zh/) * [入门课程](https://xmake.io/zh/) ## 新特性介绍 ### 新的包管理器支持 #### 添加 ubuntu/apt 的依赖包 现在我们支持使用 apt 集成依赖包,也会自动查找 ubuntu 系统上已经安装的包。 ```lua add_requires("apt::zlib1g-dev", {alias = "zlib"}) target("test") set_kind("binary") add_files("src/*.c") add_packages("zlib") ``` #### 添加 gentoo/portage 的依赖包 我们也支持了使用 Portage 集成依赖包,并且也会自动查找 Gentoo 系统上已经安装的包。 ```lua add_requires("portage::libhandy", {alias = "libhandy"}) target("test") set_kind("binary") add_files("src/*.c") add_packages("libhandy") ``` #### 从 Vcpkg 集成 arm/arm64 架构包 ```lua add_requires("vcpkg::zlib", {alias = "zlib"}) target("test") set_kind("binary") add_files("src/*.c") add_packages("zlib") ``` 配置方式还是跟之前的相同,只需要切换到 arm/arm64 架构编译就可以自动从 Vcpkg 拉取 arm/arm64 的包。 ```console $ xmake f -a arm64 $ xmake ``` #### 支持导入导出安装包 通常,我们使用 xrepo 命令或者 xmake 去安装完包后,如果相同的项目迁移到其他机器编译,那就要重新下载安装包。 为了提高开发效率,现在 xrepo 可以快速导出已经安装后的包,包括对应的库文件,头文件等等。 ```console $ xrepo export -o /tmp/output zlib ``` 然后我们也可以在其他机器上导入之前导出的安装包,实现包的迁移。 ```console $ xrepo import -i /xxx/packagedir zlib ``` 导入后,对应项目编译会直接使用它们,不再额外重新安装包。 #### 特定包 shell 环境支持 xrepo 有个 `xrepo env` 命令,可以指定加载特定包的环境,然后运行特定程序,例如加载 luajit 包的安装环境,然后运行 luajit: ```console $ xrepo env luajit ``` 或者绑定特定 luajit 版本包环境,加载 bash 后,就可以直接运行对应的 lujit。 ```console $ xrepo env -b "luajit 5.1" bash > luajit --version ``` 但是,这样有个问题,如果我们安装的包很多,不同的包配置和版本都还不同,如果我们想加载一个 bash,并且同时带有多个包的环境。 那么,之前的方式就无法支持了,因此,新版本中,我们对其进一步改进,是的可以通过在当前目录下,添加 xmake.lua 文件,定制化一些包配置,然后进入特定的包 shell 环境。 xmake.lua ```lua add_requires("zlib 1.2.11") add_requires("python 3.x", "luajit") ``` 比如上面这样,我们通过在 xmake.lua 中配置了三个包,想在 shell 中同时使用它们,那么只需要在当前目录下运行下面的命令就行了。 ```console $ 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 配置: ```lua function mirror(url) return url:gsub("github.com", "hub.fastgit.org") end ``` 然后我们设置次 pac.lua 文件,默认路径在 `~/.xmake/pac.lua`。 ```console $ xmake g --proxy_pac=/tmp/pac.lua ``` 然后,我们安装包的时候,如果遇到 github.com 域名下的包源,下载时候会自动切到 fastgit 镜像加速下载。 ```console $ 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](https://github.com/xmake-io/xmake/issues/1323): 支持从 apt 查找安装包,`add_requires("apt::zlib1g-dev")` * [#1337](https://github.com/xmake-io/xmake/issues/1337): 添加环境变量去改进包安装和缓存目录 * [#1338](https://github.com/xmake-io/xmake/issues/1338): 支持导入导出已安装的包 * [#1087](https://github.com/xmake-io/xmake/issues/1087): 添加 `xrepo env shell` 并且支持从 `add_requires/xmake.lua` 加载包环境 * [#1313](https://github.com/xmake-io/xmake/issues/1313): 为 `add_requires/add_deps` 添加私有包支持 * [#1358](https://github.com/xmake-io/xmake/issues/1358): 支持设置镜像 url 站点加速包下载 * [#1369](https://github.com/xmake-io/xmake/pull/1369): 为 vcpkg 增加 arm/arm64 包集成支持,感谢 @fallending * [#1405](https://github.com/xmake-io/xmake/pull/1405): 添加 portage 包管理器支持,感谢 @Phate6660 ### 改进 * 改进 `find_package` 并且添加 `package:find_package` 接口在包定义中方便查找包 * 移除废弃的 `set_config_h` 和 `set_config_h_prefix` 接口 * [#1343](https://github.com/xmake-io/xmake/issues/1343): 改进搜索本地包文件 * [#1347](https://github.com/xmake-io/xmake/issues/1347): 针对 binary 包改进 vs_runtime 配置 * [#1353](https://github.com/xmake-io/xmake/issues/1353): 改进 del_files() 去加速匹配文件 * [#1349](https://github.com/xmake-io/xmake/issues/1349): 改进 xrepo env shell 支持,更好的支持 powershell ### Bugs 修复 * [#1380](https://github.com/xmake-io/xmake/issues/1380): 修复 `add_packages()` 失败问题 * [#1381](https://github.com/xmake-io/xmake/issues/1381): 修复添加本地 git 包源问题 * [#1391](https://github.com/xmake-io/xmake/issues/1391): 修复 cuda/nvcc 工具链