Чтение примечаний к выпуску тоже не очень ясно для меня:
Счетчик статистики «требуется ссылка» теперь корректно обновляется при связывании с одним объектным файлом.
Но это означает, что вы выполняете компиляцию и компоновку в одной операции, поэтому 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
Теперь это сработало:
- Первая компиляция сделала промах кеша и сохранила результаты (два файла: manifest плюс .o)
- Второй попал в кеш
- g++ вызывался для ссылки всего 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
Надеюсь это поможет !
person
JeanDo
schedule
04.03.2017