在使用不同目录中编译文件的绝对路径时,如何进行ccache缓存编译?

时间:2010-01-05 19:52:02

标签: gcc cmake ccache

我使用CMake创建一个makefile。 CMake创建包含绝对路径的GCC线。

为了加快编译速度,我使用ccache。

从不同位置构建相同的代码(例如,几个开发人员编译相同的代码,每个代码在其主目录下)会导致ccache缓存未命中。

2 个答案:

答案 0 :(得分:4)

正如上面的评论中提到的,一个问题是预处理器行指令中的任何绝对路径都被ccache散列,如果使用编译器选项-g,编译器会发出源代码的绝对路径文件也是。另一个类似的问题是,如果源代码文件的路径在命令行上是绝对的,那么如果代码具有__FILE__宏的扩展,则该路径将被散列。

解决方案是升级到几天前发布的ccache 3.0。它具有可选的支持,可以重写相对路径的绝对路径,以提高命中率。请参阅手册中的Compiling in different directories

答案 1 :(得分:1)

好吧,或许可以说明显而易见的事情:你必须要么让cmake产生相对路径,要么修改ccache以将缓存条目视为匹配,如果唯一的区别是绝对路径。

在计算哈希值(用于命名缓存条目)时,我修改了我的ccache副本以忽略-pipe选项;因为该选项对编译器输出没有影响,只有它的速度。也许在计算哈希值时将它从路径中删除初始/ home / * /并不是那么困难。