0

0

如何使用Ccache加速c++项目的编译速度【开发效率】

尼克

尼克

发布时间:2025-12-27 09:54:14

|

225人浏览过

|

来源于php中文网

原创

ccache 是通过哈希编译输入复用目标文件来加速 C/C++ 重复编译的工具;需配置编译器调用方式(软链接或环境变量)、CMake 启动器参数,并优化缓存大小、命中率及路径稳定性。

如何使用ccache加速c++项目的编译速度【开发效率】

ccache 是一个编译器缓存工具,能显著加快 C/C++ 项目的重复编译速度——尤其在频繁修改、反复构建的开发场景中。它的核心原理是:对每次编译输入(源码、宏定义、头文件内容、编译选项等)做哈希,若此前已编译过完全相同的输入,就直接复用之前生成的目标文件(.o),跳过实际编译过程。

安装与基础配置

大多数 Linux 发行版可通过包管理器安装:

  • Ubuntu/Debian:sudo apt install ccache
  • CentOS/RHEL:sudo yum install ccachednf install ccache
  • macOS:brew install ccache

安装后需让构建系统调用 ccache 而非原始编译器。最常用方式是软链接或环境变量

  • gccg++ 替换为 ccache 包装器(推荐):
    ln -sf $(which ccache) /usr/local/bin/gcc
    ln -sf $(which ccache) /usr/local/bin/g++
  • 或通过环境变量(CMake 等工具更友好):
    export CC="ccache gcc"
    export CXX="ccache g++"

让 CMake 正确使用 ccache

CMake 从 3.4 版本起原生支持 ccache,启用方式简单可靠:

立即学习C++免费学习笔记(深入)”;

多面-AI面试
多面-AI面试

猎聘推出的AI面试平台

下载
  • cmake 命令中添加参数:
    cmake -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache ...
  • 也可写入 CMakeLists.txt(不推荐全局硬编码,适合团队统一规范):
    set(CMAKE_C_COMPILER_LAUNCHER "ccache")
    set(CMAKE_CXX_COMPILER_LAUNCHER "ccache")

注意:必须在 project() 指令之前设置,否则无效。

优化缓存行为与清理策略

默认缓存路径为 ~/.ccache,大小限制约 5GB。日常开发建议主动调优:

  • 增大缓存容量(例如设为 20GB):
    ccache -M 20G
  • 查看缓存状态与命中率:
    ccache -s(重点关注 cache hit rate,理想值应 >70%)
  • 定期清理低效缓存:
    ccache -C(清空)或 ccache -c(按 LRU 清理至设定上限)
  • 避免因调试符号干扰命中(如频繁切换 -g):
    可设置 export CCACHE_BASEDIR="/path/to/your/project",使相对路径更稳定

常见问题与绕过技巧

某些情况会导致缓存失效或误命中的典型场景:

  • 时间戳敏感的宏(如 __DATE____TIME__)会破坏哈希一致性 → 编译时禁用:-frecord-gcc-switches 不影响,但需避免手动注入时间宏
  • 绝对路径泄露(如头文件路径、-fdebug-prefix-map 或构建目录结构标准化
  • 需要强制重编译某文件(如调试时怀疑缓存污染):
    ccache -c && make target,或临时取消 launcher:
    CC=gcc CXX=g++ make target

ccache 不改变编译逻辑,只加速重复构建;首次编译无收益,但后续迭代速度提升立竿见影。配合合理的构建目录管理和 clean 策略,可长期维持高命中率。

相关专题

更多
macOS怎么切换用户账户
macOS怎么切换用户账户

在 macOS 系统中,可通过多种方式切换用户账户。如点击苹果图标选择 “系统偏好设置”,打开 “用户与群组” 进行切换;或启用快速用户切换功能,通过菜单栏或控制中心的账户名称切换;还能使用快捷键 “Control+Command+Q” 锁定屏幕后切换。

321

2025.05.09

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1343

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

698

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

293

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

772

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

571

2023.07.06

linux删除文件夹的方法
linux删除文件夹的方法

linux删除文件夹的方法:1、使用rm -r命令;2、使用rm -rf命令;3、使用find命令结合rm命令;4、使用图形界面。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

970

2024.02.23

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

544

2023.07.20

虚拟号码教程汇总
虚拟号码教程汇总

本专题整合了虚拟号码接收验证码相关教程,阅读下面的文章了解更多详细操作。

25

2025.12.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.1万人学习

Git 教程
Git 教程

共21课时 | 2.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号