跳转至

编译缓存

在构建比较复杂的项目的时候,例如可能使用了大量第三方包,或者本身项目就很庞大,那么可以尝试使用编译缓存工具来加速构建过程。

但是,我们刚才也提到,Make 等工具会检测依赖的改动,从而只编译有变化的文件。那么编译缓存和 Make 等检测依赖改动有什么不一样的地方呢?

一般来说,编译缓存工具会将编译的产物,例如目标文件、库文件等,保存到一个全局共享的目录下面,那么,如果我们两个项目各自保存引用了同一个第三方库,编译缓存工具可以进行跨项目的缓存共享,从而节约构建时间。

另外,有的时候我们可能因为各种原因,需要清空目录下的构建产物从头构建,由于编译缓存是存放在别的位置的,哪怕我们清空了当前目录的编译产物,下一次从头构建的时候,还可以利用之前构建产物加速构建。所以,即使构建系统本身已经可以项目减少一部分不必要的编译,我们还可以利用编译缓存进一步地加速构建。

编译缓存的正确性保证

编译缓存会使用文件内容哈希以及编译命令哈希等多种因素来确保编译缓存的正确性。一个合格的编译缓存工具,应该是让使用者察觉不到任何不同的。

使用 ccache 进行编译缓存

目前,对于 C/C++ 而言,常用的编译缓存工具是 ccache。它有两种使用方法,一是在编译命令前添加 ccache,例如原本是 g++ a.cpp,那么只需要使用 ccache g++ a.cpp 就能利用编译缓存。另一种更加简单粗暴,那就是使用 ccache 替换掉 gccg++ 等命令。


最后更新: 2021-07-29 22:19:57
本页作者: Howard Lau