为什么编译第一次失败但第二次成功?

时间:2019-04-16 12:02:55

标签: delphi compilation 32-bit delphi-10.2-tokyo

这个问题与32位编译器Delphi 10.2 Tokyo有关。

当我更改特定单元(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文件中。

源代码结构中有多个循环,但是没有interface-interface-interface多种(不应该编译,对吧?)。我需要一些有关寻找内容的准则。

我的理论:unit A已更改,因此计划重新编译; unit B使用unit A,因此也计划将其重新编译; unit A通常在unit B之前进行编译,但编译器已决定unit B首先(由于某些依赖周期); unit B寻找已编译的unit A,但还没有这样的东西-因此,unit A中的符号被视为丢失。

我的理论正确吗?如果是这样,我们如何避免这个问题?我找不到执行某些编译顺序的方法。

0 个答案:

没有答案