2017-02-17 4 views
1

Мы все это слышали - «попробуйте чистую сборку и посмотрите, работает ли она». Зачастую при восстановлении исчезают странные ошибки времени выполнения. Это заставило меня задуматься - правильное отслеживание зависимостей - это работа системы сборки.Ошибки времени выполнения, которые исчезают при восстановлении, указывающие на ошибки в системе сборки?

Такие ошибки времени выполнения по определению ошибки в системе сборки - будь то make, или msbuild, или в зависимости от того, что произойдет. Или иначе, если чистая сборка и нормальная сборка дают разные результаты, заключается в том, что по определению ошибка в системе сборки?

Edit: Я предполагаю, the build environment is sane - это означает, что при обновлении файлов, их «Последнее изменение» метка времени становится новее (вместо старой временной метки или же). Фактически, все системы управления версиями, которые я знаю, следуют этому правилу, потому что иначе они будут разбивать системы построения, такие как Make, которые полагаются на отметки времени, чтобы отслеживать, какие файлы нужно обновлять.

+0

Предположим, что есть проблема м с вашей системой. Проблема устраняется откатом одного из исходных модулей. Вы делаете регулярную сборку. Он видит, что отметка времени скомпилированного модуля после метки времени исходного модуля, поэтому он не перекомпилирует этот модуль. Вы запускаете встроенную систему, и у нее все еще есть проблема. Вы запускаете чистую сборку, и каждый модуль построен. Теперь проблема исправлена. –

+0

Git устанавливает метку времени в текущее время при замене файла, в частности, для решения этой проблемы. Я думаю, что все системы контроля версий делают это так. http://stackoverflow.com/a/2179876/492336 – sashoalm

+0

Я просто описываю сценарий, который произошел со мной. –

ответ

1

Системы сборки могут быть оптимизированы для производительности или полноты.

Перестроить все - комплектность.

Причиной частичного восстановления не удается это

  • неправильные знания. Библиотека построена, но фрагментированная система сборки не понимает зависимости целого.
  • отсутствующих зависимостей. Несмотря на то, что понимаются прямые зависимости кода заголовка с c, косвенные зависимости пропускаются.
  • Редактировать и продолжить сбой компиляции. Частичная сборка mid понимает последствия изменения кода и недостаточно перекомпилирует.

Все эти ошибки компенсируются преимуществами

  • проще поддерживать сделать файлы
  • быстрее компилирует
  • быстрее ошибка оборачиваться

Вы должны сделать свое собственное суждение где находится значение

+0

Еще одна возможность - артефакт был частично построен как часть предыдущей попытки сборки и теперь находится в неполном состоянии. Если зависимости этого артефакта не обновляются, система сборки не будет знать, что артефакт необходимо перестроить. – Stobor

Смежные вопросы