Каково различие между компиляцией и созданием в Delphi?

С Delphi-6 существует две опции: Сборка и Компиляция.

Я знаю, когда я запускаю программу, она компилирует только файлы, которые изменились, и использует DCUs для тех, которые не имеют. Когда я нажимаю сборку, по-видимому, она восстанавливает DCUs.

То, что я задавался вопросом, когда я делаю программу для выпуска (изменяющий настройки сборки, условные переменные, и т.д.) я могу просто скомпилировать, или я должен сделать полную сборку?

Что происходит, если я не делаю полной сборки, есть ли какой-либо consiquence?

18
задан Daisetsu 13 July 2010 в 01:59
поделиться

4 ответа

При сборке, при компиляции?

Компилятор автоматически перекомпилирует модули только при изменении отметки даты и времени исходных файлов .pas (1,2).

При других изменениях состояния в проекте (директивы, отладка или другие настройки компилятора и т. Д.) Компилятор не будет автоматически перекомпилировать. Вот когда вам нужно форсировать сборку.

Вам также необходимо принудительно выполнить перестройку при изменении .inc или других включенных ($ I) файлов (3), поскольку их отметка даты и времени не проверяется.

Итак, если изменяется что-либо, кроме файлов .pas модуля, вам необходимо выполнить сборку.

Бывают странные случаи в строительстве. Чаще всего возникает ошибка «не удается найти блок xxx» , хотя кажется, что она есть

  1. . Один из них возникает, когда путь объекта в проекте неверен или используется относительный путь во время работы. каталог неверен. (см. Delphi отлаживает неправильный модуль )
  2. (я не совсем уверен в этом, это гипотеза) .dcu перекомпилирован из-за CRC (1), но недавно скомпилированный dcu находится в другом каталоге. Это не проблема для текущей компиляции (поскольку правильный dcu уже загружен), но при последующей компиляции (например, в зависимом пакете) старый файл dcu обнаруживается снова, а источник не -> ошибка. в случае сомнений всегда очищайте каталоги сборки, рекурсивно удаляя все DCU
  3. , модуль упоминается с неправильным путем в .dpr

(1), и если Delphi похож на FPC, .dcu содержат CRC раздела интерфейса всех ЦУ это зависит. Это можно использовать, чтобы проверить, есть ли дополнительная необходимость в перекомпиляции. Например.из-за манипуляций с файловой системой (перемещение dcu)

(2) для экспертов, обратите внимание на {$ implicitbuild xx}

(3) в отличие от Delphi, FPC действительно перестраивает при изменении .inc. Проект FPC широко использует файлы .inc внутри, это изменение уже относится к тому времени, когда появилась поддержка Delphi. В результате пакеты, которые копируют файл "define" inc в любой каталог, не будут компилироваться с FPC, потому что они обычно имеют немного другой размер и CRC. Indy (10) - хороший тому пример.

16
ответ дан 30 November 2019 в 06:42
поделиться

@Daisetsu, вот разница между сборкой и компиляцией.

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

Компиляция компилирует только измененные используемые единицы.

По моему личному опыту, когда вы вносите изменения в конфигурацию компилятора, вы должны выполнить сборку приложения, чтобы изменения отражались во всех модулях проекта.

25
ответ дан 30 November 2019 в 06:42
поделиться

При подготовке выпуска вы должны обязательно выполнить полную сборку.
Нет никаких оправданий, ведь компилятор Delphi достаточно быстр.

Разъяснение важности воспроизводимого выпуска

  • При подготовке выпуска у вас будет версия вашего продукта, которую будут использовать другие люди.
  • Если они сообщают о проблемах, вам может потребоваться вернуться к этой версии, чтобы проверить и исправить проблему.
  • Если вы выполнили не полную сборку, а вместо этого использовали существующие DCU, существует шанс , что один из ваших исходных файлов не был перекомпилирован.
  • Даже если такая возможность довольно мала, она может серьезно помешать вам быстро решить проблему.
  • Эта проблема усугубляется по мере того, как система становится больше, имеет больше взаимозависимостей и больше версий, «поддерживаемых в дикой природе».

Для вашего здравомыслия я настоятельно рекомендую вам всегда делать полную сборку готовой к выпуску версии.
Я регулярно делаю полные сборки даже для невыпускаемых версий.

2
ответ дан 30 November 2019 в 06:42
поделиться

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

Ранее скомпилированные файлы DCU могли быть скомпилированы с другими настройками, такими как определения компилятора. Это может привести к тому, что два модуля в одном проекте будут скомпилированы с разными настройками.

3
ответ дан 30 November 2019 в 06:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: