Как использовать ccache выборочно?

Мне нужно скомпилировать несколько версий приложения, написанного на C ++, и я думаю использовать ccache для ускорения процесса.

В ccache howtos есть примеры, которые предлагают создать символические ссылки с именем gcc, g ++ и т.д. и убедиться, что они появляются в PATH перед исходными двоичными файлами gcc, поэтому вместо этого используется ccache.

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

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

Есть ли лучшие способы использовать ccache выборочно, а не всегда?

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


person Community    schedule 22.04.2010    source источник


Ответы (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.

...

person mimoralea    schedule 25.09.2013
comment
Что ж, на самом деле это не работает. Например, это не работает для проекта Биткойн, который настраивает ccache с помощью скриптов. Было бы здорово, если бы мы знали, где находятся ccaches файлы кеша, чтобы мы могли просто удалить их. Как и в случае с любым другим решением для кеширования. - person foki; 19.10.2020

Какая ОС? 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 все равно будет запущен, но просто вызовет настоящий компилятор.

person James    schedule 22.04.2010

Я сталкивался с этим уже очень много раз. Для меня лучшим решением было сделать это:

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.
person Pius Raeder    schedule 20.07.2018

Альтернативой созданию символических ссылок является явное использование ccache gcc в качестве компилятора C и ccache g++ в качестве компилятора C ++. Например, если ваш Makefile использует переменные CC и CXX для определения компиляторов, вы можете выполнить сборку с make CC="ccache gcc" CXX="ccache g++" или настроить его во время настройки (./configure CC="ccache gcc" CXX="ccache g++").

person Joel Rosdahl    schedule 23.06.2010