Хороший вопрос.
Когда я собирал систему CI для большого проекта C ++ для Microsoft Visual Studio 2003/2005/2008, я также встречал проблемы с инкрементными сборками.Особенно при использовании предварительно скомпилированных заголовков, кажется, не работает при всех обстоятельствах делать инкрементную сборку.Мне было бы интересно услышать, если у кого-то есть подробное объяснение этого, то есть, что работает, а что нет.
В моем случае, проект занял более одного часа, чтобы построить с нуля, поэтому для того, чтобы иметьс некоторой разумной скоростью обратной связи в течение дня, я закончил делать чистую ночную сборку, которая была сборкой релиза, и внутри дня я использовал инкрементные сборки, основанные на ночной.Это работало довольно хорошо, за исключением случаев, когда добавочное здание не могло правильно подобрать изменения и перекомпилировать все необходимые вещи.Я попробовал этот подход, потому что считаю, что получение обратной связи очень важно, и если пошаговая сборка терпит неудачу раз в месяц или реже, я был готов жить с компромиссом.
В общем, мне нравится иметь вещи лучше, чем чтоЯ описал выше, поэтому в других проектах, где было возможно получить больше оборудования и реорганизовать компоненты для параллельной сборки, я обычно делаю полную перестройку.Если вы можете делать параллельные сборки, вы можете значительно ускорить сборку.
Другие вопросы, которые следует учитывать:
- включение и прямое объявление
- использование шаблона
- общие зависимости между вещами
- выделяют части проектов в качестве независимых библиотек, которые могут даже быть предварительно собраны.
Существует множество вещей, которые могут бытьсделано для ускорения сборки, и в большинстве случаев я бы отнес их к инкрементным сборкам.