分享

【转】android源码中ccache使用及原理简介

 techres 2014-03-18
分类: 工作 2012-07-23 17:25 2344人阅读 评论(0) 收藏 举报
可以使用编译器高速缓存工具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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多