Как выполнить компиляцию кэша ccache при использовании абсолютных путей к скомпилированным файлам в разных каталогах?
Я использую CMake для создания make-файлов. CMake создает строку GCC, содержащую абсолютные пути.
Для ускорения компиляции я использую ccache.
Сборка одного и того же кода из разных мест (например, несколько разработчиков компилируют один и тот же код, каждый из которых находится в своем домашнем каталоге), приводит к отсутствию кэша ccache.
2 ответа
Как упомянуто в комментарии выше, одна проблема состоит в том, что любые абсолютные пути в директивах строки препроцессора хэшируются ccache, и если опция компилятора -g
используется, компилятор также выдает абсолютный путь к файлу исходного кода. Другая похожая проблема заключается в том, что если путь к файлу исходного кода является абсолютным в командной строке, этот путь будет хеширован, если код имеет расширение __FILE__
макро.
Решением является обновление до ccache 3.0, который был выпущен несколько дней назад. Он имеет дополнительную поддержку для перезаписи абсолютных путей к относительным путям, чтобы увеличить частоту попаданий. См. Компиляция в разных каталогах в руководстве.
Что ж, возможно, указав очевидное: вам нужно либо заставить cmake создать относительные пути, либо изменить ccache, чтобы считать записи в кэше совпадающими, если единственная разница - абсолютный путь.
Я изменил свою копию ccache, чтобы игнорировать -pipe
опция при расчете хеша (который используется для именования записей в кеше); поскольку эта опция не вызывает различий на выходе компилятора, только на его скорости. Возможно, было бы не так сложно заставить его убрать начальные /home/*/ пути при вычислении хеша.