我有一个关于缓存配置的问题。在我们的开发环境中,有数百个make文件使用绝对路径构建对象。
我想加快这个过程,使用缓存。不幸的是,当从不同的位置编译时,我可以看到缓存缺失。的例子简化了源文件放在不同目录中的情况。我如何设置缓存以获得适当的命中率?
我尝试设置CCACHE_BASEDIR变量,但没有成功:
developer@crunchbang:~$ pwd
/home/developer
developer@crunchbang:~$ ccache -s
cache directory /home/developer/.ccache
cache hit (direct) 0
cache hit (preprocessed) 0
cache miss 0
files in cache 0
cache size 0 Kbytes
max cache size 1.0 Gbytes
developer@crunchbang:~$ ccache g++ -c /home/developer/unique_name1/contest.cpp
developer@crunchbang:~$ ccache g++ -c /home/developer/unique_name2/contest.cpp
developer@crunchbang:~$ ccache -s
cache directory /home/developer/.ccache
cache hit (direct) 0
cache hit (preprocessed) 0
cache miss 2
files in cache 4
cache size 16 Kbytes
max cache size 1.0 Gbytes
developer@crunchbang:~$ ccache g++ -c /home/developer/unique_name1/contest.cpp
developer@crunchbang:~$ ccache g++ -c /home/developer/unique_name2/contest.cpp
developer@crunchbang:~$ ccache -s
cache directory /home/developer/.ccache
cache hit (direct) 2
cache hit (preprocessed) 0
cache miss 2
files in cache 4
cache size 16 Kbytes
max cache size 1.0 Gbytes
developer@crunchbang:~$ ccache --version
ccache version 3.1.7
Copyright (C) 2002-2007 Andrew Tridgell
Copyright (C) 2009-2011 Joel Rosdahl
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 3 of the License, or (at your option) any later
version.
您是否考虑过将makefile更改为使用相对路径?你可以使用这篇文章中提到的技巧来做到这一点,而不必做太多的改变。
另外注意:CCACHE_BASEDIR生成相对于当前工作目录的路径(可能可以在手册中更清楚地指定)。这意味着您的2个编译命令将导致(使用CCACHE_BASEDIR=/home/developer):
developer@crunchbang:~$ ccache g++ -c unique_name1/contest.cpp
developer@crunchbang:~$ ccache g++ -c unique_name2/contest.cpp
换句话说:它们仍然是不同的。只有在unique_name目录中进行编译,这个问题才会得到解决。例如
developer@crunchbang:~$ cd /home/developer/unique_name1 && ccache g++ -c /home/developer/unique_name1/contest.cpp
developer@crunchbang:~$ cd /home/developer/unique_name2 && ccache g++ -c /home/developer/unique_name2/contest.cpp
将导致:
developer@crunchbang:~$ ccache g++ -c contest.cpp
developer@crunchbang:~$ ccache g++ -c contest.cpp
第二次编译后的ccache miss(2)是上次运行的旧统计数据。您可以运行"ccache -z"来清除上次的缓存统计信息,然后再进行编译。