#c #cmake
#c #cmake
Вопрос:
У меня есть проект cpp cmake, для компиляции основных компонентов которого требуется немного времени.
Допустим
- Компонент A (компиляция занимает 2 часа)
- Компонент B (компиляция занимает 1 час)
- Компоненту C необходимо статически связать компоненты A и B (занимает 5 минут)
В основном мы меняем только компонент C.
Но мы хотим, чтобы наши элементы сборки PR перестраивали A и B, если это необходимо, но не обязательно, если не было никаких изменений.
Я хотел бы создавать компоненты A и B один раз за ночь.
Затем в течение дня разрешите нашим PR-шлюзам загружать из них промежуточные компоненты, а затем выполнять инкрементную сборку, восстанавливая только те части, которые были изменены.
Однако cmake, похоже, встраивает много информации о пути к папке в промежуточные файлы / файлы штампов кэша и прочее. И наши машины сборки каждый раз имеют немного разные пути. (например c:repo###sourceDir и ### меняется каждый раз.
Есть ли какой-нибудь простой способ сделать это? Или мне нужно «изменить все соответствующие файлы .txt, .tlog, текст в кэше и т.д.», А также вернуть временные метки к их оригиналам после изменения пути к файлам в соответствии с текущей машиной.
Я попытался просто скопировать папку /intermediates / со всеми .obj и другими вещами, но я думаю, что cmake придирчив к путям к папкам.
И я не хочу использовать предварительно созданный.библиотека lib или .dll из компонента A или B, потому что мы могли внести в них изменения, поэтому в этом случае она должна быть инкрементной.
Редактировать /ответы
Я еще не заглядывал в ccache, не слышал об этом.
мы вызываем это через cmake.exe (настройка/сборка/установка) cmakelists.txt . У каждого компонента есть свои собственные cmakelists.txt в папке верхнего уровня
- src/componentA/cmakelists.txt (управляет всем сам по себе, не имеет уступа B или C)
- src/componentA/cmakelists.txt (управляет всем сам по себе, не имеет уступа A или C)
- src/componentC/cmakelists.txt (управляет всем сам по себе включает из A и B)
Комментарии:
1. вы думали об использовании
ccache
?2. Как здесь задействован cmake? Используете ли вы древовидную структуру cmake, в которой B и C являются подпапками cmakelist в папке cmakelist верхнего уровня?
3. Я изучу ccache, не знаком с ним.
4. отредактированный основной комментарий.
5. «Промежуточные элементы» CMake (артефакты, созданные на этапе конфигурирования и сборки) не предназначены для переноса на другую машину. Если только эта другая машина не очень-очень «похожа» на ту, на которой создаются эти промежуточные продукты, с теми же утилитами и их путями, теми же исходными кодами и каталогами сборки и так далее.