Cmake и многоступенчатая сборка (повторное использование) - PullRequest
0 голосов
/ 19 марта 2019

У меня есть проект 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...