查看: 5|回复: 5
打印 上一主题 下一主题

[实用教程] android源码中ccache使用及原理简介

[复制链接]

26

主题

1

好友

810

积分

GR 团队

Rank: 3Rank: 3

该用户从未签到

G币
0
最后登录
2016-8-2
注册时间
2012-7-22

IP 编辑 禁止 帖子 清理

跳转到指定楼层
楼主
发表于 2014-3-4 14:35 |只看该作者 |倒序浏览
本帖最后由 bruce+chen 于 2014-3-4 14:37 编辑

我们可以使用编译器高速缓存工具complier cache(ccache)来加快编译速度. 如果你经常”make clean” ,
ccache能大大缩短再次编译的时间
可以通过设置以下命令来启用ccache。可以将该环境变量写入.bashrc或类似文件,避免每次都设置。
$ export USE_CCACHE=1
默认cache存储在~/.ccache. 可以使用下列命令来设置路径
$ export CCACHE_DIR=<path-to-your-cache-directory>
推荐的cache大小为50-100GB. 可以使用下列命令来设置cache size
$ prebuilt/linux-x86/ccache/ccache -M 50G  (工程目录下运行)
该设置会永久存储在CCACHE_DIR
可以使用以下命令来查看ccache的运行状况:
$ watch -n1 -d prebuilt/linux-x86/ccache/ccache -s   (工程目录下运行)
目前在我们的项目中已经设置有ccache,但cache size 偏小,可以重新设置一下cache size即可。
原理简介:
ccache 工具通过将头文件高速缓存到源文件之中而改进了构建性能,因而通过减少每一步编译时添加头文件所需要的时间而提高了构建速度
在标准的编译过程中,在 UNIX 下使用 C/C++ 开发应用程序通常需要用到一个编译器(如 gcc)以及一个编译工具,比如 make。make 和所有的 C 编译器的问题在于 C 预处理程序(preprocessor)和头文件的工作方式。观察一个典型的 C 源文件,您会发现其中有很多由 #include 所引用的各种头文件。
每一次编译一个文件时,C 预处理程序(cpp)都会解析并引入每个头文件以及这些头文件引用到的任何文件。通过对内容进行解析,ccp 可以将一个相当基本的 1-KB 大小的源文件转化为一个 8-KB 大小的源文件,在这个过程中,会合并入几十个甚至几百个头文件。在典型的开发项目中,有很多与项目相关的头文件可能会在不同的源文件中多次被引入,而且每个头文件本身也可能引用很多其他头文件。
在典型的编译过程中,make 工具只编译自上次编译后发生修改的文件,这样就在很大程度上简化了编译过程。
make 将必须被编译的文件限制在经过修改的那些源文件范围之内,但是即使是使用 make,仍然有相当可观的浪费。每一次编译项目时,源文件在编译为汇编语言和最终的机器代码之前,都要通过 cpp 进行解析。对每一个文件来说,每一次可能都要重新解析头文件。从编译的全过程来看,您最后可能多次解析了相同的头文件,浪费了处理器周期,更重要的是浪费了开发者的时间,因为他们要等待这一过程的完成。在一个团队中,这一影响可能会更为明显,
因为多名开发者可能都会反复多次重复这一过程,在某一天甚至可能会同时进行。
ccache(“compiler cache”的缩写)工具会高速缓存编译生成的信息,并在编译的特定部分使用高速缓存的信息,比如头文件,这样就节省了通常使用 cpp 解析这些信息所需要的时间。如果您编译清单 2 中的文件,假定 foobar.h 中包含对其他头文件的引用,ccache 会用那个文件的 cpp-parsed 版本来取代 include 声明。就那么简单。不是真正去读取、理解并解释其内容,ccache 只是将最终的文本拷贝到文件中,使得它可以立即被编译。
清单 2. 源文件内容
#include “foobar.h”
void main

分享到:
ckarea 娱乐地带  i909rom

57

主题

0

好友

1567

积分

GR 团队

Rank: 3Rank: 3

  • TA的每日心情
    无聊
    2016-8-2 18:48
  • 签到天数: 35 天

    [LV.5]常住居民I

    G币
    68
    最后登录
    2016-12-4
    注册时间
    2011-8-5

    IP 编辑 禁止 帖子 清理

    沙发
    发表于 2014-3-4 14:36 |只看该作者
    支持一下
    风华绝代红颜笑,回眸不语画中人。
    秒表怎么看  opera 10.5

    0

    主题

    0

    好友

    53

    积分

    初中生

    Rank: 3Rank: 3

  • TA的每日心情
    无聊
    2014-6-13 18:16
  • 签到天数: 1 天

    [LV.1]初来乍到

    G币
    9
    最后登录
    2016-12-26
    注册时间
    2011-12-6

    IP 编辑 禁止 帖子 清理

    板凳
    发表于 2014-6-13 18:21 |只看该作者
    感谢分享感谢分享
    通达oa精灵  g11 recovery

    0

    主题

    0

    好友

    652

    积分

    大学本科

    Rank: 6Rank: 6

  • TA的每日心情
    开心
    2016-10-9 10:12
  • 签到天数: 176 天

    [LV.7]常住居民III

    G币
    436
    最后登录
    2016-10-9
    注册时间
    2014-4-26

    IP 编辑 禁止 帖子 清理

    地板
    发表于 2014-12-9 14:02 |只看该作者
    android源码中ccache使用及原理简介
    美人相机  美图绣绣
    头像被屏蔽

    0

    主题

    0

    好友

    32

    积分

    禁止发言

  • TA的每日心情
    擦汗
    2015-10-14 20:04
  • 签到天数: 2 天

    [LV.1]初来乍到

    G币
    9
    最后登录
    2016-8-2
    注册时间
    2015-10-13

    IP 编辑 禁止 帖子 清理

    5
    发表于 2015-10-15 19:01 |只看该作者
    提示: 作者被禁止或删除 内容自动屏蔽,只有管理员或有管理权限的成员可见
    看帖子的要发表下看法
    签名被屏蔽
    枪支俱乐部  查查论坛
    头像被屏蔽

    0

    主题

    0

    好友

    492

    积分

    禁止发言

    该用户从未签到

    G币
    0
    最后登录
    2016-8-2
    注册时间
    2016-3-28

    IP 编辑 禁止 帖子 清理

    6
    发表于 2016-7-19 13:09 |只看该作者
    提示: 作者被禁止或删除 内容自动屏蔽,只有管理员或有管理权限的成员可见
    佩服你,能发这么好的帖子,厉害






    安卓软件下载  煲耳机
    高级模式
    B Color Image Link Quote Code Smilies @朋友 |上传

    举报|手机版|机锋网 ( 京ICP备15020343号 | 京公网安备11010802020450号

    GMT+8, 2017-1-25 10:44

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回顶部