Как выполнить компиляцию кэша ccache при использовании абсолютных путей к скомпилированным файлам в разных каталогах? - PullRequest
5 голосов
/ 05 января 2010

Я использую CMake для создания make-файлов. CMake создает строку GCC, содержащую абсолютные пути.

Для ускорения компиляции я использую ccache.

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

Ответы [ 2 ]

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

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

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

1 голос
/ 05 января 2010

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

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

...