Чтение 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
Теперь он работал:
- Первая компиляция сделал промах кэша, и хранятся результаты (два файлов: манифест плюс .o)
- Второй сделал кэш ударил
- г ++ был вызван для ссылки в 4 раза всего, в том числе 2 раза с нет источника, но только .o
И призвал к предварительной обработке? Просто, вы просто использовали свой компилятор, чтобы расширить все включить/определить материал (например, при поиске зависимостей)
$ 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
Надеется, что это помогает!