ДЛЯ НАЧАЛА: ЖИВЫЕ

- Knoppix -
Линукс за пять минут
- Puppy Linux -
Хороший друг


ДЛЯ ДЕЛА: ПРОФИ

- Debian -
Он такой один
- Linux Mint -
С родинкой на щеке!
- CentOS -
Копейка рубль бережёт!
- Fedora -
По следам Red Hat
- Ubuntu Linux -
Мы одной крови!
- Mageia -
Красота и удобства
- openSUSE -
Настоящее немецкое качество
- Slackware -
Линукс из кубиков
- ALT Linux -
Что русскому хорошо





ДЛЯ ДЕЛА: РОЛЛЫ

- ArchLinux -
Гениальное - просто!
- PCLinuxOS -
Просто линукс
- Aptosid -
Почувствуй силу!


ДЛЯ ДЕЛА: СОБЕРИ САМ

- Gentoo -
Каждому своё
- LinuxFromScratch -
Линукс с нуля


ДЛЯ ДЕЛА: ЛЁГКИЕ

- DeLiCate -
Старость в радость!
- SLAX -
Тысяча и один модуль


ЗАЩИТА

- OpenWall -
Не стучите, закрыто!
- Kali -
Вам, хакеры!


ПРИЛОЖЕНИЯ

- Planet CCRMA -
Работа со звуком
- VegaStrike -
Каждому по планете!


ЭКСПЕРИМЕНТ

- коЛинуксы -
Не выходя из Виндоус
- GoboLinux -
Очевидно и вероятно
- ReactOS -
Освободите Виндоус!


РОДНЯ

- BSD-семейство -
На плечах гигантов
- OpenIndiana -
До звёзд рукой подать


АРХИВ (2003-2016)
ФОРУМ




НАШИ ПРОЕКТЫ

MATRIX GL
ПОЛЕЗНЫЕ СОВЕТЫ
ПИНГВИН В КАРМАНЕ
ЗАКЛАДКИ
СТАТЬИ
КОНТАКТЫ


ПОМОЧЬ






Личный архив ЕЗ

ccache - кэш для компилятора

Иногда приходится много раз собирать одну и ту же программу, каждый раз фактически компилируя одни и те же исходные файлы в одни и те же бинарные. Программа ccache кэширует результаты компиляции, позволяя значительно ускорить повторные пересборки приложения.

При своей работе ccache на основе компилируемого файла, опций компилятора и выводимых им предупреждений/ошибок вычисляет хэш (по алгоритму md4) и сохраняет его, результат компиляции и все сообщения компилятора в папке кэша (~/.ccache). Если при вызове ccache оказывается, что этот файл уже компилировался (проивзодится сравнение хэша), вместо реального вызова компилятора ccache выдает откомпилированный файл из своего кэша и при необходимости генерирует те же сообщения, которые в нормальных условиях выдал бы компилятор. Разумеется, проверка и выдача из кэша результата гораздо быстрее обычной компиляции.

Существует 2 способа использования ccache. 1-й - вместо вызова, например, gcc -c foo.c -o foo.o -O2 и т.д. использовать ccache gcc -c foo.c -o foo.o -O2. В таком случае при сборке многофайловых проектов (использующих Makefile), т.е. всех сколько-нибудь серьезных программ, надо как-то сообщать make, что компилятором является не gcc, а "ccache gcc". Обычно для этого надо запускать make так:

make CC="ccache gcc" CXX="ccache g++"

Еще один вариант, не требующий внесения дополнительных изменений в процесс сборки - поставить ccache в /usr/local и сделать с него ссылки на /usr/local/bin/gcc:

cp ccache /usr/local/bin/

ln -s /usr/local/bin/ccache /usr/local/bin/gcc

ln -s /usr/local/bin/ccache /usr/local/bin/cc

При этом командой gcc будет вызываться /usr/local/bin/ccache (файлы из /usr/local/bin имеют преимущество перед файлами из /usr/bin), который будет выполнять свою работу и при необходимости вызывать настоящий gcc (из /usr/bin).

У ccache есть несколько полезных опций командной строки:

-s показывает статистику работы (в частности, число сохраненных результатов компиляции, число компиляций, когда файл был выдан из кэша, и текущий размер кэша);

-F и -M позволяют установить максимальный размер кэша (по числу файлов и объему соответственно);

-C полностью очищает кэш.

Имеет смысл задать ограничение на объем кэша, т.к. при достаточно частой компиляции программ кэш довольно быстро разрастается.

У ccache есть один небольшой недостаток - если при компиляции с его использованием произошла ошибка, вызванная "железными" проблемами (например, перегрев процессора при разгоне) - без очищения кэша не удастся откомпилировать этот файл, даже если проблема была устранена. Это связано с тем, что ccache кэширует в т.ч. и безуспешные компиляции, выдавая при всех последующих попытках то же сообщение об ошибке, даже если при обычной компиляции ошибка не возникла бы. Впрочем, если ошибка была вызвана проблемами сборочной системы (например, отсутствовал некий заголовочный файл, позже установленный), ccache заново вызовет gcc, как если бы такой компиляции еще не происходило (т.к. при кэшировании сохраняется достаточно подробная информация о условиях компиляции, что позволяет при любом влияющем на результат изменении условий сборки производить компиляцию заново).

Вернуться к оглавлению


При частичной или полной перепечатке, переводе, переработке материалов сайта ссылка на Knoppix.ru обязательна.
(c) Knoppix.ru 2003 - 2016