# C++加速编译工具ccache
当C++工程比较大的时候,编译时间将是一个不得不考虑的问题。有很多加快编译的方法,其中一种是使用缓存机制。ccache
就是利用编译输出缓存加速编译的工具,当开发者试图构建相同的东西两次时,它将从读取缓存,而不是进行编译。
# ccache介绍
ccache
是一个编译器缓存工具,它通过缓存之前的编译结果来加速重新编译的过程。当再次进行相同的编译时,ccache
可以检测到并直接从缓存中获取结果,从而避免了重复的编译过程。
ccache的主要特性包括:
- 支持GCC、Clang、MSVC(Microsoft Visual C++)等类似的编译器3。
- 在Linux、macOS、其他类Unix操作系统以及Windows上工作。
- 理解C、C++、汇编器、CUDA、Objective-C和Objective-C++。
- 支持通过HTTP(例如使用Nginx或Google Cloud Storage)、Redis或NFS进行远程缓存,可选择地将数据分片到服务器集群。
- 使用inode缓存来避免在构建过程中反复哈希相同的头文件(在支持的操作系统和文件系统上。
- 支持使用Zstandard进行压缩。使用XXH3校验缓存内容以检测数据损坏。
- 保持命中/未命中的统计信息。
- 自动管理缓存大小。
- 安装简单,可以从源码编译,也有编译好的二进制文件
- 开销低
- 支持将绝对路径重写为相对路径,以提高缓存命中率
- 可选地在可能的地方使用文件克隆(也称为“reflinks”)来避免复制。在可能的地方使用硬链接来避免复制
值得注意的是,ccache
只知道如何缓存单个文件的编译。对于其他类型的编译(如多文件编译、链接等),ccache
会静默地回退到运行实际的编译器。
此外,一些编译器标志不受支持。如果检测到这样的标志,ccache
也会静默地回退到运行实际的编译器。
# 安装及使用
ccache
的主页为:https://ccache.dev/ (opens new window)
ccache
对平台语言编译器的支持情况:https://ccache.dev/platform-compiler-language-support.html (opens new window)
安装包下载https://ccache.dev/download.html (opens new window)
下载安装包后解压文件
tar -xvf ccache-4.9.1-linux-x86_64.tar.xz
解压缩后的包中包含有使用手册,MANUAL.html
使用方式有两种,
- 一种是临时用法,直接作为gcc/g++命令前缀:
ccache gcc test.c -o t
- 另一种是全局用法:
cp ccache-4.9.1-linux-x86_64/ccache /usr/local/bin
sudo ln -s /usr/local/bin/ccache /usr/local/bin/gcc
sudo ln -s /usr/local/bin/ccache /usr/local/bin/g++
通过创建软链接后,将ccache
化妆成了gcc/g++
,‵cmake`等会自动调用。
ccache
支持很多配置选项,可以在配置文件中进行配置:
# ~/.ccache/ccache.conf
max_size = 5.0G
ccache
还会统计缓存命中等信息,
ccache -- show-stats
# Cacheable calls: 7946 / 7957 (99.86%)
# Hits: 1541 / 7946 (19.39%)
# Direct: 0 / 1541 ( 0.00%)
# Preprocessed: 1541 / 1541 (100.0%)
# Misses: 6405 / 7946 (80.61%)
# Uncacheable calls: 11 / 7957 ( 0.14%)
# Local storage:
# Cache size (GB): 1.4 / 5.0 (27.75%)
以上就是使用ccache
的介绍。