Как использовать ccache выборочно?
Мне нужно скомпилировать несколько версий приложения, написанного на C++, и я думаю использовать ccache для ускорения процесса.
В руководствах ccache есть примеры, в которых предлагается создавать символические ссылки с именами gcc, g++ и т. д., и убедиться, что они появляются в PATH перед исходными двоичными файлами gcc, поэтому вместо них используется ccache.
Пока все хорошо, но я бы хотел использовать ccache только при компиляции этого конкретного приложения, но не всегда.
Конечно, я могу написать сценарий оболочки, который будет пытаться создавать эти символические ссылки каждый раз, когда я хочу скомпилировать приложение, и удаляю их при компиляции приложения. Но это похоже на злоупотребление файловой системой для меня.
Есть ли лучшие способы использовать ccache выборочно, не всегда?
Для компиляции одного файла исходного кода я мог бы просто вручную вызвать ccache вместо gcc и все, но мне приходится иметь дело со сложным приложением, которое использует автоматизированную систему сборки для нескольких файлов исходного кода.
4 ответа
Чтобы обойти ccache просто:
export CCACHE_DISABLE=1
Для получения дополнительной информации:
man ccache
...
If you set the environment variable CCACHE_DISABLE then ccache will just call the real compiler, bypassing the cache completely.
...
Какая ОС? Linux? Большинство упакованных версий ccache уже помещают эти символические ссылки в каталог, например, на моей машине Fedora они находятся в /usr/lib64/ccache.
Так что вы могли бы просто сделать
PATH=/usr/lib64/ccache:${PATH} make
когда вы хотите собрать с ccache.
Большинство пакетов также устанавливают файл в /etc/profile.d/, который автоматически включает ccache, добавляя его в PATH, как указано выше.
Если это так в вашей системе, просто установите CCACHE_DISABLE=1
(увидеть man ccache
для получения дополнительной информации) в вашей среде, чтобы отключить ccache - ccache все равно будет работать, но просто вызовет настоящий компилятор.
Я наткнулся на это много раз. Для меня лучшим решением было сделать это:
export CCACHE_RECACHE=1;
Из страниц ccache:
Corrupt object files
It should be noted that ccache is susceptible to general storage problems. If a bad object file sneaks into
the cache for some reason, it will of course stay bad. Some possible reasons for erroneous object files are
bad hardware (disk drive, disk controller, memory, etc), buggy drivers or file systems, a bad prefix_command
or compiler wrapper. If this happens, the easiest way of fixing it is this:
1. Build so that the bad object file ends up in the build tree.
2. Remove the bad object file from the build tree.
3. Rebuild with CCACHE_RECACHE set.
Альтернативой созданию символических ссылок является явное использование ccache gcc
как компилятор C и ccache g++
как компилятор C++. Например, если ваш Makefile использует переменные CC
а также CXX
чтобы указать компиляторы, вы можете построить с make CC="ccache gcc" CXX="ccache g++"
или настроить его во время настройки (./configure CC="ccache gcc" CXX="ccache g++"
).