Как использовать ccache выборочно? - PullRequest
18 голосов
/ 22 апреля 2010

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

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

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

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

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

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

Ответы [ 4 ]

18 голосов
/ 25 сентября 2013

Чтобы обойти 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.

...

3 голосов
/ 22 апреля 2010

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

2 голосов
/ 23 июня 2010

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

1 голос
/ 20 июля 2018

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

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.
...