在之前的部分中,我们讨论了ccache如何影响PostgreSQL的构建时间。现在我想知道不同的构建目录布局如何影响ccache。我以前从未使用过make构建系统中的单独构建目录(“vpath builds”),所以这个问题从未让我太担心。但是现在使用Meson就需要这样做。 我的问题是:两个构建目录是否可以共享ccache条目? ccache文档提供了一些关于此的信息: 要使不同的构建目录之间能够使用缓存命中,可以执行以下操作: 如果您使用-g(或类似选项)为对象文件添加调试信息,则必须执行以下操作之一: 使用编译器选项-fdebug-prefix-map=<old>=<new>将调试信息重定位到公共前缀(例如-fdebug-prefix-map=$PWD=.);或者设置hash_dir = false。 如果您在命令行的任何地方使用绝对路径(例如源代码文件路径或编译器选项(如-I和-MF)的参数),则必须将base_dir设置为绝对路径的“基目录”。然后,ccache将在计算哈希之前将该目录下的绝对路径重写为相对路径。 在开发过程中,第一个条件(-g选项)当然是成立的。这意味着如果没有其他操作,两个构建目录无法共享缓存命中。您可以通过以下方式观察到这一点: 如果按照指示设置选项hash_dir = false(例如在~/.config/ccache/ccache.conf中,或者导出CCACHE_HASHDIR=false),则第二次运行将获得100%的缓存命中: ccache文档对此选项有一些注意事项: 默认情况下,将CWD包含在哈希中的原因是为了防止将

彼得·艾森特劳特:Ccache与PostgreSQL构建目录

Planet PostgreSQL
Planet PostgreSQL ·