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