При сборке, при компиляции?
Компилятор автоматически перекомпилирует единицы только при изменении отметки даты и времени исходных файлов .pas (1,2).
При других изменениях состояния в проекте (директивы, отладка или другие параметры компилятора и т. Д.) Компилятор не будет автоматически перекомпилироваться.Вот когда вам нужно форсировать сборку.
Вам также нужно принудительно пересобрать, когда .inc или другие включенные ($ I) файлы изменяются (3), так как их отметка даты и времени не проверяется.
Итак, когда что-нибудьно файлы модуля .pas изменяются, вам нужно выполнить сборку.
В сборке есть несколько странных случаев.В большинстве случаев «не удается найти юнит хх» ошибка, пока она там есть
- единица, когда путь к блоку в проекте неверен или используетсяотносительный путь, в то время как рабочий каталог неверен.(см. Delphi отлаживает неправильный модуль )
- (я не совсем уверен в этом, это гипотеза) .dcu перекомпилируется из-за CRC (1), новновь скомпилированный dcu находится в другом каталоге.Это не проблема для текущей компиляции (так как правильный dcu уже загружен), но в последующей компиляции (например, в зависимом пакете) старый файл dcu снова найден, а источник не -> error. в случае сомнений всегда очищайте свои сборки сборки, рекурсивно удаляя все DCU
- , в котором .dpr
(1) упоминается с неверным путеми если Delphi похож на FPC, .dcu содержит CRC раздела интерфейса всех dcu, от которых он зависит.Это можно использовать для проверки необходимости дополнительной перекомпиляции.Например, из-за манипуляций с файловой системой (перемещая dcu примерно)
(2) для экспертов, посмотрите на {$ implicitbuild xx} тоже
(3) в отличие от Delphi, FPC перестраивает на.inc изменения.Проект FPC интенсивно использует файлы .inc для внутреннего использования, это изменение уже произошло до того, как появилась поддержка Delphi.В результате пакеты, которые копируют inc-файл «define» в любой каталог, не будут компилироваться с FPC, потому что они обычно немного отличаются по размеру и CRC.Indy (10) является хорошим примером этого.