Как мне установить ccache?

36

Я хочу использовать ccache для ускорения компиляции.

Я сталкивался Как включить ccache? ,

Это то, что я сделал до сих пор:

$ sudo apt-get install -y ccache
$ dpkg -l ccache
ii  ccache  3.1.6-1   Compiler cache for fast recompilation of C/C++ code
$ whereis ccache
ccache: /usr/bin/ccache /usr/lib/ccache /usr/bin/X11/ccache /usr/share/man/man1/ccache.1.gz

Я ccacheдобавил к пути, добавив его в мой ~/.bashrcфайл:

$ export PATH="/usr/lib/ccache:$PATH"
$ source ~/.bashrc
$ echo $PATH
/usr/lib/ccache:/usr/local/cuda-5.5/bin/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Символические ссылки выглядят хорошо:

$ ll /usr/lib/ccache/
total 76
drwxr-xr-x   2 root root  4096 mai   22 10:48 ./
drwxr-xr-x 253 root root 69632 mai   22 10:48 ../
lrwxrwxrwx   1 root root    16 mai   22 10:48 avr-g++ -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 avr-gcc -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 avr-gcc-4.5.3 -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 c++ -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 c89-gcc -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 c99-gcc -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 cc -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 g++ -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 g++-4.6 -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 gcc -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 gcc-4.6 -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 x86_64-linux-gnu-g++ -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 x86_64-linux-gnu-g++-4.6 -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 x86_64-linux-gnu-gcc -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 x86_64-linux-gnu-gcc-4.6 -> ../../bin/ccache*

Ссылка выглядит хорошо:

$ which g++
/usr/lib/ccache/g++

$ make
g++ -o affine_euler affine_euler.cpp -O3 -DEIGEN_NO_DEBUG -I/usr/include/eigen3
g++ -o test_eigen test_eigen.cpp -O3 -DEIGEN_NO_DEBUG -I/usr/include/eigen3

Но кеш пуст:

$ ccache -s
cache directory                     /home/dell/.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

Где я не прав?

Виктор Ламойн
источник
Я понял, что это работает в общем случае, но не с моим make-файлом (работает, например, с cmake). Так что я думаю, проблема в моем make-файле, а не в конфигурации ccache.
Виктор Ламойн

Ответы:

45

Установка:

# Install package
sudo apt install -y ccache

# Update symlinks
sudo /usr/sbin/update-ccache-symlinks

# Prepend ccache into the PATH
echo 'export PATH="/usr/lib/ccache:$PATH"' | tee -a ~/.bashrc

# Source bashrc to test the new PATH
source ~/.bashrc && echo $PATH

Ваш путь (по крайней мере, начало) должен выглядеть так:

/usr/lib/ccache:/usr/local/cuda-5.5/bin/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

И g++/ gccтеперь должен указывать на:

which g++ gcc
/usr/lib/ccache/g++
/usr/lib/ccache/gcc

Конфигурация:

Если вы не хотите ограничивать количество файлов и размер кэша:

ccache -F 0
ccache -M 0

Показать статистику кеша:

ccache -s

Очистите кеш и сбросьте статистику:

ccache -C -z

Использование:

Каждый раз, когда вы звоните gccили g++; ccacheназывается. Моя ошибка заключалась в том, что я не удалял уже скомпилированные файлы. Просто удалите все ваши CMake/ выходные файлы и настройте / скомпилируйте снова.

Вы ccacheне должны быть пустыми тогда. Теперь попробуйте make cleanи , makeи вы увидите , что это намного быстрее , чем перекомпиляции все , что благодаря кэш - памяти.

Виктор Ламойн
источник
кое-как, следуя этой инструкции, ccache не кэширует clang и clang ++ ...
Wang
4

Вы $PATHне выглядите правильно; ccacheКаталог должен быть там. Просто беги:

export PATH="/usr/lib/ccache/:$PATH"

... и попробуйте свои g++команды снова. Этот каталог полон прокси-команд, которые вызывают ccache. Это должно работать с большинством сценариев.


Если вы просто вызываете g++вручную (не так, как описано выше, где вы используете make), вы можете просто добавить команду:

ccache g++ ...
Оли
источник
Этого каталога не существует: $ ls -1 /usr/lib/ccache/ avr-g++ avr-gcc avr-gcc-4.5.3 c++ c89-gcc c99-gcc cc g++ g++-4.6 gcc gcc-4.6 x86_64-linux-gnu-g++ x86_64-linux-gnu-g++-4.6 x86_64-linux-gnu-gcc x86_64-linux-gnu-gcc-4.6
Виктор Ламойн
Я читал учебник по Arch. Если все только /usr/lib/ccache/используется, просто используйте это.
Оли
Это не работает с export PATH="/usr/lib/ccache/:$PATH" бинарным ccache в /usr/binи /usr/bin/X11. Я пытался с обоими этими путями безуспешно
Виктор Ламойн
Но прокси-команды (как вы перечислили выше) все в /usr/lib/ccache/. Вы добавляете их в свой путь , так что , когда makeвызовы g++или ccили независимо от того , что это на самом деле вызывая ccache-Enabled версию.
Оли
Я близок, потому что ссылка теперь указывает на ccache (я редактировал первый пост), но кеш всегда пуст.
Виктор Ламойн
1

По поводу установки:

Я обнаружил, что в Ubuntu 18.04 (Bionic Beaver) поставляемый по умолчанию не перехватывает вызовы ccи c++. Чтобы полностью установить ccache, вам необходимо:

sudo apt install ccache
sudo /usr/sbin/update-ccache-symlinks
export PATH="/usr/lib/ccache/:$PATH"

И затем (из-за обновленных символических ссылок) также звонки ccи c++поймали!

Юрген Вайгерт
источник