Использование gcc вместе с ccache

Я думал об использовании ccache с кодом, скомпилированным gcc, на базе всей команды (один и тот же кеш ccache будет использоваться всеми разработчиками на одной машине).

Поскольку мы говорим о коммерческом продукте, «правильность» компиляции является главным приоритетом.

Вот и вопросы:

  1. Является ли компиляция с использованием ccache безопасной / воспроизводимой? Есть ли какие-то исключительные ситуации, когда ccache ошибочно полагает, что кеш попадает в кеш?

    Если я проверю исходный код и скомпилирую его, я ожидаю получать одни и те же продукты (точно такие же библиотеки / двоичные файлы) каждый раз, когда повторяю новый процесс компиляции. Это необходимо для коммерческого продукта.

  2. Существуют ли продукты с открытым исходным кодом / коммерческие продукты, использующие ccache как неотъемлемую часть своей системы сборки? Так будет легче убедить моих коллег использовать ccache.

Спасибо


person dimba    schedule 15.09.2009    source источник


Ответы (2)


Согласно руководству, ccache определяет, компилировал ли он какой-либо объект раньше, по следующему:

  • вывод препроцессора при запуске компилятора с -E
  • параметры командной строки
  • реальный размер компилятора и время модификации
  • любой вывод stderr, сгенерированный компилятором

Если какой-то PHB все еще обеспокоен любым предполагаемым риском, который вы берете на себя из-за ccache, используйте его только для сборок разработки и создавайте конечный продукт с помощью компилятора без какого-либо внешнего интерфейса. Или вы можете очистить кеш перед созданием конечного продукта.

Обновление: я не знаю о продуктах, использующих ccache в качестве неотъемлемой части своей системы сборки, но действительно тривиально интегрировать в любую среду, где вы можете установить путь компилятора. Т.е. для autoconf:

CC="ccache gcc" ./configure

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

Обновление в ответ на комментарий Рингдинга об использовании stderr: С точки зрения ccache, одна интересная информация - это версия компилятора C и строка конфигурации. gcc выводит это в стандартный файл ошибок:

$ gcc -v 2>err
$ cat err
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.3.4-2' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-targets=all --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.3.4 (Debian 4.3.4-2)

Готов поспорить, что ccache использует этот или аналогичный вывод. Но, эй, вы всегда можете посмотреть его исходный код. :-)

person hillu    schedule 15.09.2009
comment
Он не может принять решение на основе вывода stderr компилятора, потому что он должен сначала вызвать компилятор. Но остальные 3 верны, IIRC. - person Ringding; 15.09.2009
comment
Ребята, а вы знаете ответ на 2 пункт моего вопроса? @hillu +1 за советы по безопасности. Приятной частью вашего ответа является то, что разработчик также может выполнить безопасную сборку, если предварительно очистить кеш. - person dimba; 15.09.2009

Я лично знаком только с ccache, который очень прост в использовании, и я считаю его чрезвычайно полезным для моих крупномасштабных частных проектов. Однако что касается общекомандной базы, то у меня пока нет опыта. Вас также могут заинтересовать AO (проверенные объекты):

В основном:

  • он обеспечивает более надежный механизм, может использовать распределенную среду для кеширования
  • ccache ускоряет только время компиляции, в то время как AO ускоряет время компоновки.
  • не ограничивается только c / c ++

Вскоре после того, как я опубликовал ответ (1,5 года назад ...), мне удалось убедить наших менеджеров по сборке и НИОКР интегрировать ccache в систему автоматической сборки, и они мне за это благодарны. В компании работает более 200 разработчиков, так что она действительно работает. Что касается фазы связывания, это все еще проблема.

person Daniel Heilper    schedule 16.07.2012