彼得·艾森特劳特:Ccache与PostgreSQL构建目录
💡
原文英文,约900词,阅读约需4分钟。
📝
内容提要
在之前的部分中,我们讨论了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的构建时间。
- 使用Meson时需要使用单独的构建目录。
- 不同的构建目录是否可以共享ccache条目是一个问题。
- 要使不同构建目录之间共享缓存命中,需使用-g选项或设置hash_dir为false。
- 使用绝对路径时,必须设置base_dir为绝对路径的基目录。
- 在开发过程中,-g选项通常是有效的,两个构建目录无法共享缓存命中。
- 设置hash_dir为false后,第二次运行将获得100%的缓存命中。
- ccache文档指出,默认情况下将CWD包含在哈希中是为了防止调试信息中的工作目录问题。
- 使用-fdebug-prefix-map选项是ccache文档中提到的替代解决方案。
- 在使用make vpath构建时,源目录通常是绝对路径,而在Meson中路径通常是相对的。
- 使用多个构建目录通常是因为构建不同的配置,ccache可能不适用。
🏷️
标签
➡️