在之前的部分中,我们讨论了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包含在哈希中的原因是为了防止将
在最近的文章中,我比较了使用不同编译器编译PostgreSQL的时间,并回应了读者关于使用Meson构建工具的要求。我使用了相似的构建配置和步骤,以确保公平比较。我测试了不同的构建方式,包括顺序构建、并行构建和使用ccache进行缓存的并行构建。
PSPDFKit的代码库超过60万行,编译时间较长。引入ccache后,编译速度显著提升,Jenkins测试时间从14分钟缩短至8分钟,构建时间从50分钟降至15分钟。ccache通过缓存编译结果,减少重复编译,提高效率,但不支持Clang模块和预编译头文件。
完成下面两步后,将自动完成登录并继续当前操作。