ccache统计信息的意思是“呼叫链接”。我以为ccache只包装了编译器,而不是链接器?
[Brian@localhost ~]$ ccache -s
cache directory /home/Brian/.ccache
cache hit (direct) 19813
cache hit (preprocessed) 67
cache miss 11
called for link 498
called for preprocessing 10
unsupported source language 472
no input file 12
files in cache 258568
cache size 33.8 Gbytes
max cache size 100.0 Gbytes
答案 0 :(得分:4)
ccache
确实不支持链接。
它确实取代了C编译器(更具体地说是C编译器驱动程序),但是(查看它的安装和使用位置和方式)。因此,它需要“传递”它接收的任何命令,而不是处理/修改自己到工具链的各个部分。
答案 1 :(得分:3)
阅读release notes对我来说也不是很清楚:
统计计数器“呼叫链接”现在正确更新时 链接单个目标文件。
但这意味着你正在编译&在单个操作中进行链接,因此ccache无法透明地提供结果。
使用基本的hello.c程序进行演示。首先让我们清除一切:
$ ccache -Czs
Cleared cache
Statistics cleared
cache directory /home/jdg/.ccache
cache hit (direct) 0
cache hit (preprocessed) 0
cache miss 0
files in cache 0
一步完成编译和链接(两次,只是为了确定):
$ ccache g++ hello.c
$ ccache g++ hello.c
$ ccache -s
cache hit (direct) 0
cache hit (preprocessed) 0
cache miss 0
called for link 2
files in cache 0
没有任何缓存,因为ccache不能
分两步完成(也是两次):
$ ccache g++ -c hello.c ; g++ hello.o
$ ccache g++ -c hello.c ; g++ hello.o
$ ccache -s
cache hit (direct) 1
cache hit (preprocessed) 0
cache miss 1
called for link 4
no input file 2
files in cache 2
现在有效:
并且要求预处理的东西?很简单,您只是使用编译器来扩展所有包含/定义内容(例如,在查找依赖项时)
$ g++ -E hello.c
$ g++ -M hello.c
$ ccache -s
cache hit (direct) 1
cache hit (preprocessed) 0
cache miss 1
called for link 4
called for preprocessing 2
unsupported compiler option 1
no input file 2
files in cache 2
希望这有帮助!