2010-01-05 1 views
4

Я использую cmake для создания make-файлов. cmake создает линию gcc, содержащую абсолютные штрихи. Чтобы ускорить компиляцию, я использую ccache.ccache и абсолютный путь

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

В Googled это, но не найдено хорошего ответа.

+0

Существуют ли абсолютные пути, влияющие на коммутаторы GCC или входящие в постобработный источник? 'ccache' обычно рассматривает только переключатели и хэшированные постобработки; абсолютные пути не должны иметь значения. ('CCACHE_UNIFY' является исключением.) – ephemient

+0

' -I/home/nicolas/src/foo/lib' является допустимым gcc-переключателем и имеет другой идентичный компилятор, но в вашем каталоге, с '-I/home/ephemient/src/foo/lib', приведет к провалу кеша; он не будет соответствовать записи кэша, созданной моим компилятором. Полагаю, это то, что он имел в виду. –

+1

Нет, 'ccache' явно игнорирует' -I' и другие флаги путей, которые должны влиять только на препроцессор, поэтому обычные случаи (например, такие) хороши. – ephemient

ответ

1

Ну, может быть, заявив очевидное: вам нужно либо получить cmake для создания относительных путей, либо изменить ccache, чтобы рассматривать записи кэша как совпадающие, если единственным отличием является абсолютный путь.

Я изменил свою копию ccache, чтобы игнорировать параметр -pipe при вычислении хэша (который используется для обозначения записей кэша); поскольку этот параметр не вызывает различий в выходе компилятора, только на его скорости. Возможно, было бы не так сложно заставить его разбивать начальные/домашние/*/пути при вычислении хэша.

4

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

Решение заключается в обновлении до ccache 3.0, который был выпущен несколько дней назад. Он имеет дополнительную поддержку для переписывания абсолютных путей в относительные пути, чтобы увеличить скорость попадания. См. Compiling in different directories в руководстве.

+0

Эта новая версия звучит круто ... –