我使用 CMake 创建生成文件。CMake 创建包含绝对路径的 GCC 行。
为了加快编译速度,我使用了 ccache。
从不同位置构建相同的代码(例如,几个开发人员编译相同的代码,每个代码都在其主目录下)会导致 ccache 缓存未命中。
正如上面评论中提到的,一个问题是预处理器行指令中的任何绝对路径都由 ccache 散列,如果使用编译器选项-g
,编译器也会发出源代码文件的绝对路径。__FILE__
另一个类似的问题是,如果源代码文件的路径在命令行上是绝对路径,那么如果代码有宏的扩展,该路径将被散列。
解决方案是升级到前几天发布的ccache 3.0。它可选择支持将绝对路径重写为相对路径,以提高命中率。请参阅手册中的在不同目录中编译。
好吧,也许是显而易见的:如果唯一的区别是绝对路径,则您必须让 cmake 生成相对路径,或者修改 ccache 以将缓存条目视为匹配。
我已经修改了我的 ccache 副本以-pipe
在计算哈希(用于命名缓存条目)时忽略该选项;因为该选项不会对编译器输出造成任何影响,只会影响其速度。在计算哈希时,让它从路径中剥离初始 /home/*/ 可能并不难。