Ccache 是一个编译器缓存工具,它可以加速重新编译的过程,通过缓存先前的编译结果,并在进行相同编译时检测到这一点。以下是 Ccache 的一些主要特点:
支持多种编译器:包括 GCC、Clang、MSVC(Microsoft Visual C++)等。
跨平台:在 Linux、macOS、Unix-like 系统以及 Windows 上工作。
支持多种语言:包括 C、C++、汇编、CUDA、Objective-C 和 Objective-C++。
支持远程缓存:可以通过 HTTP、Redis 或 NFS 进行,还可以选择性地将数据分片到服务器集群。
快速模式:提供不依赖于预处理器的 “direct” 和 “depend” 模式。
使用 inode 缓存:避免在构建过程中重复哈希相同的头文件(在支持的操作系统和文件系统上)。
支持压缩:使用 Zstandard 压缩缓存内容。
检查缓存内容:使用 XXH3 校验和来检测数据损坏。
统计信息:跟踪缓存命中和未命中的统计信息。
自动缓存大小管理:易于安装和管理。
低开销:对编译过程的影响很小。
路径重写:支持将绝对路径重写为相对路径以提高缓存命中率。
文件克隆和硬链接:在可能的情况下使用文件克隆或硬链接来避免复制文件。
Ccache 的限制包括:
只能缓存单个文件的编译,不支持多文件编译或链接等其他类型的编译。
某些编译器标志不被支持,如果检测到这样的标志,Ccache 将回退到实际编译器。
“direct mode” 模式在某些边缘情况下可能导致错误的缓存命中。
使用 Ccache 的好处包括:
提供比实际编译器更快的编译速度。
可以在不同目录的构建之间共享缓存。
可以加速服务器或构建农场定期执行的干净构建。
可以在共享编译服务器上在用户之间共享缓存。
Ccache 致力于提供与实际编译器完全相同的输出,包括提供完全相同的目标文件和编译器警告。