Як налаштувати кеш-пам'ять?


36

Я хочу використовувати 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

Де я помиляюся?


Я зрозумів, що це працює в загальному випадку, але не в моєму makefile (наприклад, працює з cmake). Тому я думаю, що проблема полягає в моєму makefile, а не в конфігурації 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 не кешує кланг та кланг ++ ...
Ван

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
Віктор Ламойн

Я читав підручник з арками. Якщо все просто, /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++. Щоб повністю встановити кеш-пам'ять там, вам потрібно:

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

А потім (через оновлені символьні посилання) також дзвонить ccі c++потрапляє!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.