Как я делаю компиляцию кэша кэша при использовании полных путей для скомпилированных файлов в различных каталогах?

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

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

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

5
задан Peter Mortensen 24 February 2019 в 08:52
поделиться

2 ответа

[

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

] [

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

].
1
ответ дан 14 December 2019 в 19:15
поделиться

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

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

4
ответ дан 14 December 2019 в 19:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: