前不久在安装一个软件的时候发现需要 protobuf 3.6.1 而 Manjaro Linux 自带的是 3.6.0.1 但是找到了 PKGBUILD 文件,于是准备用 makepkg 命令编译并用 pacman -U 进行安装,结果却陷入了一场编译速度优化大战。
提起 Arch Linux,我们很容易想到 AUR (Archlinux User-community Repository)和 PKGBUILD,我们可以自己编写 PKGBUILD 文件,然后上传到 AUR,最后通过 pacman 来安装,如果无法通过 pacman 来安装,也可以自己 build,即 makepkg 命令,但是就像我先前的遭遇一样,Manjaro Linux 的 makepkg 配置文件默认是单线程,这会很慢,很慢!下面是我在 编译 protobuf 3.6.1 时用到的优化策略:
makepkg - 并行编译
编辑 /etc/makepkg.conf 查找 MAKEFLAGS 行,改为 MAKEFLAGS="-j8" ,这样子编译的时候将使用 8 个核,速度更快。我的测试中,从30分钟降到6分钟,5倍的性能提升吧。
使用内存文件系统进行编译
编辑 /etc/makepkg.conf 找到 BUILDDIR 改为 /tmp/makepkg ,如果找不到就新增,我是新增。亲测影响不大,可能是因为我的测试本身就在 /tmp 目录下进行,且还是固态硬盘的缘故吧。
使用 ccache
先安装ccache,然后编辑 /etc/makepkg.conf ,找到 BUILDENV ,将其值中 ccache 前面的感叹号去掉即可,我改后为:BUILDENV=(!distcc color ccache check !sign)
如果你只需要加速 编译,那么,第一步即可,当然,你也可以使用第二三步,实测影响微乎其微,甚至因为 ccache 的目录是在用户目录下,由于读写磁盘反而导致编译速度减慢,我的测试中使用ccache 反而多了 10秒,当然,只测了一次,存在一定的误差是可能的。
ccache 配置
ccache 默认的配置文件为 /etc/ccache.conf 以及 ~/.ccache/ccache.conf
如果您内存足够大的话,修改默认的缓存路劲:cache_dir = /tmp/ccache
禁用 export CCACHE_DISABLE=1
清理 ccache -C
另外,默认是占用 5G ,你也可以修改为 2G ccache --set-config=max_size=2.0G