Почему компиляция в первый раз не удалась, а во второй раз удалась? - PullRequest
0 голосов
/ 16 апреля 2019

Этот вопрос касается Delphi 10.2 Tokyo, 32-разрядного компилятора.

Когда я меняю интерфейс определенного модуля (A), компиляция завершается неудачно в unit B в первый раз.Когда я перезапускаю компиляцию, она продолжается (иногда работает только третья компиляция).Если я создаю проект или удаляю все .dcu файлы (я думаю, что нужно удалить только «плохие»), все работает просто отлично.Это не такая большая проблема для ручной компиляции, но автоматическая компиляция может быть серьезно затруднена.Это происходит с несколькими другими модулями (и первый модуль, вызвавший эту проблему, перестал вызывать ее после некоторого изменения, но трудно сказать, какое изменение и в каком файле).

Это происходит с несколькими методами компиляции -напрямую с RAD studio, с возможностью внешней компиляции, с msbuild.

С этими сообщениями не получается:

    [dcc32 Error] B(x): E2003 Undeclared identifier: 'Some_Class_From_Unit_A'
    [dcc32 Error] B(y): E2003 Undeclared identifier: 'Other_Class_From_Unit_A'
    [dcc32 Error] B(z): E2066 Missing operator or semicolon
    ...bunch of E2066 Missing operator or semicolon...

Когда я удаляю C.dcu, происходит сбой компиляции в unit D с отсутствующими ссылкамив unit E, но редактирование unit E напрямую не приводит к сбою подобной компиляции.

Все единицы ссылаются только по имени, пути находятся в .dproj файлах.

Существует несколькоциклы в структуре исходного кода, но ни один из разнообразия интерфейс-интерфейс-интерфейс (который не должен компилироваться, верно?).Мне нужны некоторые рекомендации о том, что искать.

Моя теория: unit A была изменена, поэтому ее планируется перекомпилировать;unit B использует unit A, поэтому он также запланирован для перекомпиляции;unit A обычно компилируется до unit B, но компилятор решил, что unit B идет первым (из-за некоторого цикла зависимости);unit B ищет скомпилированный unit A, но такого еще нет - поэтому символы из unit A считаются пропущенными.

Правильна ли моя теория?Если так, как мы можем избежать этой проблемы?Мне не удалось найти способ принудительного выполнения какого-либо порядка компиляции.

...