sccache是 Mozilla 开源的一款编译缓存工具——可以把它理解为ccache的"现代化升级版"。
它是干什么的
编译 C++/CUDA 项目时,编译器每次都要从头处理每个源文件。但实际开发中,你改一行代码重新编译,99% 的源文件内容没变,编译结果其实可以直接复用。sccache 就是干这个的:
原始流程: 源码 → 编译器(慢) → .o 缓存流程: 源码 → sccache 算哈希 → 命中? 直接取出缓存的 .o (毫秒级) ↘ 未命中 → 调编译器编译 → 存入缓存它包装在编译器外面(作为CMAKE_C_COMPILER_LAUNCHER),对构建系统透明。
和 ccache 的区别
| ccache | sccache | |
|---|---|---|
| 作者/背景 | 传统老牌工具 | Mozilla 开发,Rust 编写 |
| 语言支持 | C/C++ 为主 | C/C++、Rust、NVCC(CUDA) |
| 缓存存储 | 仅本地磁盘 | 本地磁盘、S3、GCS、Azure、Redis |
| 分布式共享缓存 | 弱(需 NFS 等) | 原生支持——团队/CI 共享一份云端缓存 |
比如,像 Holoscan 这种 CUDA 重型项目选 sccache 的原因很明确:支持 NVCC,且官方 CI 和./run容器环境用它做共享缓存。
你为什么会遇到这个错误
HOLOSCAN_USE_SCCACHE=ON是默认开启的(Holoscan 的 CMake 默认值),官方预期在./run构建容器里干活——容器镜像里已经预装了 sccache。而现在走的是**"本地环境 + CMake"裸机路线**(文档里标记为"未积极维护"的高级方式),宿主机上没装这个工具,CMake 配置阶段就报错了。
两种解决办法
办法一:直接关掉(简单直接,推荐先用这个)
第一次本地构建,缓存没有也照样编译,只是慢点:
cmake-S~/ex_holoscan/tmp01/holoscan-sdk-Bbuild-cu13-x86_64\-GNinja\-DCMAKE_BUILD_TYPE=Release\-DCUDAToolkit_ROOT:PATH="/usr/local/cuda"\-DHOLOSCAN_USE_SCCACHE=OFF如果之前配置过,删掉旧缓存重来:rm -rf build-cu13-x86_64。
办法二:安装 sccache(如果你想加速后续反复构建)
# 方式 A:直接下官方预编译二进制(最快)wgethttps://github.com/mozilla/sccache/releases/download/v0.17.0/sccache-v0.17.0-x86_64-unknown-linux-musl.tar.gztarxzf sccache-*.tar.gzsudocpsccache-*/sccache /usr/local/bin/ sccache--version# 方式 B:有 Rust 工具链的话cargoinstallsccache--locked# 方式 C:snapsudosnapinstallsccache装好后正常走 CMake 配置即可,不用加OFF开关。首次构建慢(缓存冷),改代码后二次构建会快非常多——对 Holoscan 这种规模的项目,全量编译几十分钟,命中缓存的增量编译可能只要几分钟。
建议:如果只是验证性地编一次 SDK,用办法一;如果准备长期在裸机上迭代开发 Holoscan,值得花两分钟装上 sccache(办法二),它对 NVCC 编译的加速效果尤其明显。