vergil wang


Hi, i'm vergilw, i'm a iOS developer from China, i'm living in Hubei,Wuhan.


iOS Developer

ccache编译器缓存

ccache是什么

ccache(compiler cache)是一个编译器缓存工具,它通过缓存先前的编译结果来减少重新编译的时间。支持的语言包括C,C ++,Objective-C和Objective-C++,主要工作于GCC编译器或者跟GCC类似的编译器。 ccache是samba团队贡献的开源工具,当前由samba团队的Joel Rosdahl负责维护,最初是由Andrew Tridge Tridgell开发。灵感来源于Erik Thiele的编译器缓存shell脚本,打破了shell脚本的限制,获得更快的缓存速度。

ccache如何工作

传统编译过程

在标准的编译过程中,在 UNIX 下使用 C/C++ 开发应用程序通常需要用到一个编译器(如 gcc)以及一个编译 工具,比如 make。make 和所有的 C 编译器的问题在于 C 预处理程序(preprocessor)和头文件的工作方式。观察 一个典型的 C 源文件,您会发现其中有很多由 #include 所引用的各种头文件。

每一次编译一个文件时,C 预处理程序(cpp)都会解析并引入每个头文件以及这些头文件引用到的任何文件。 通过对内容进行解析,ccp 可以将一个相当基本的 1-KB 大小的源文件转化为一个 8-KB 大小的源文件, 在这个过程中,会合并入几十个甚至几百个头文件。在典型的开发项目中,有很多与项目相关的头文件可能 会在不同的源文件中多次被引入,而且每个头文件本身也可能引用很多其他头文件。

ccache作用

ccache工具会高速缓存编译生成的信息,并在编译的特定部分使用高速缓存的信息,比如头文件。ccache将先前编译过的头文件的文本直接拷贝到文件中,代替了头文件引用的代码,使得它可以立即被编译,从而达到编译加速的效果。

ccache适用场景

ccache适用于多人协作的大型项目,主要适用于以下三种情况:

  1. 如果你使用过make clean; make,ccache会大有用处。开发者通常会出于各种原因对项目进行clean build,这会抛弃先前编译中的所有信息。但是使用ccache,重新编译会更快。
  2. 如果你的主项目依赖多个子项目,例如用CocoaPods/Cathage管理不同的模块,子项目分布于不同的文件夹中。使用ccache,可以从缓存中获取。
  3. 如果你们项目使用了CI,使用ccache是非常有用的。

Reference

最近的文章

JavaScript事件循环

为什么JavaScript是单线程?JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊。JavaScript的单线程,与它的用途有关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。比如,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程...…

继续阅读
更早的文章

Semantic Versioning

大部分开发平台都有包管理工具,这让我们可以很方便的管理第三方的工具集。由于第三方工具集也在不断更新迭代,为了保证第三方工具集的更新不会影响项目的稳定性,很多时候我们会使用包管理工具依赖指定的第三方工具版本,而不是最新版本。很多包管理工具使用的版本号命名方式遵从Semantic Versioning。所以无论是使用第三方工具,还是自己发布第三方工具,了解Semantic Versioning十分必要。Semantic Versioning介绍Semantic Versioning版本号X...…

继续阅读