1

Delphi dcc 命令行编译器(dcc32.exe、dcc64.exe、dcclinux64.exe 等)的 -i 选项到底是什么?与 -u? 帮助只是简要说明了这一点(并且 Embarcadero 文档似乎没有扩展该主题):

    -I<paths> = Include directories
    -U<paths> = Unit directories

有一段时间,我认为 -u 用于包含源代码,而 -i 用于包含预编译的 .dcu 文件,但似乎并非如此。我还看到 -i 导入源代码和 -u 导入 .dcu 文件的情况,而且这似乎工作得很好。另一个想法是 -u 是 Delphi IDE 中项目搜索路径的对应物,-i 是 Delphi IDE 全局库路径的对应物,但这似乎也不是决定性的。

我什么时候应该使用-i 或-u 中的一个或另一个?

4

1 回答 1

3

本页http://docwiki.embarcadero.com/RADStudio/Sydney/en/Include_file_(Delphi)的备注部分开始

$I 参数指令指示编译器在编译中包含命名文件。实际上,文件被插入到 {$I filename} 指令之后的编译文本中。

文件名的默认扩展名是 .pas。未指定文件扩展名的文件名始终获得 .pas 扩展名。如果文件名没有指定目录路径,那么Delphi除了搜索与当前模块同目录的文件外,还会在Project > Options的Delphi Compiler页面的Search path输入框中指定的目录中搜索对话框(或在命令行编译器的 -I 选项中指定的目录中)。……”

要理解的重要一点是,这不是在谈论一般搜索源文件,而是在源文件中由

{$inc }

或者

{$include }

源文件中的指令。例如

unit SomeUnit;

{$inc SomeIncludeFile}

interface

[...]

在 {$inc} 或 {$include} 指令中命名的文件称为“包含文件” - 因此引用页面的标题主题。根据备注最后一段中提到的限制,该指令几乎可以出现在源文件中的任何位置,并且在编译期间,编译器用命名文件的内容替换指令(包括文件名)。Turbo Pascal 对单元的支持include files早于其对单元的支持,主要是为了确保两个或多个源文件可以表现得好像它们包含相同的文本,例如共享代码或定义。

-i设置告诉编译器一个或多个文件夹在其中查找文件,例如由编译器在编译项目中的源文件时遇到的指令SomeIncludeFile命名的文件。include

-u设置告诉编译器在编译期间到哪里查找单元文件(例如 .Pas 和 .Dcu 文件)。

于 2021-03-21T10:38:10.410 回答