为什么Delphi(dcc32.exe)可以选择设置"命名空间搜索路径"?

mjn*_*mjn 5 delphi compiler-construction namespaces

Delphi 2007和2009中的编译器(dcc32.exe)有一个选项

-NS<namespaces> = Namespace search path
Run Code Online (Sandbox Code Playgroud)

这与项目选项对话框中的编译器选项'Default namespace'和'Namespace prefixes'有关吗?搜索"路径"听起来像一个文件夹(目录)名称,所以我不确定这个选项有什么用处.

pep*_*pak 2

此设置的目的是提供用于搜索不完全限定的单位名称的前缀列表。例如,在较旧的 Delphi 版本中,您的设备的界面部分中通常会有类似这样的内容:

uses
  Windows, SysUtils, Classes;
Run Code Online (Sandbox Code Playgroud)

这将指示编译器在尝试查找未知标识符时使用Windows,SysUtils和单元。Classes

在更现代的 Delphi 中,它的工作方式大致相同,只是单位不再称为Windowsor SysUtils,而是称为WinApi.Windowsor System.SysUtils。如果您仅使用WindowsSysUtils,则不会找到它们。

但是,当然,没有人愿意将所有源代码重写为新的单位名称。Delphi 编译器提供了一个选项,用于指定在未找到确切的单元名称时默认搜索的名称空间。在上面的例子中,我们可以将默认命名空间设置为WinApi;System,然后所有单元都会被正确找到,因为Delphi编译器会尝试搜索Windows(未找到),WinApi.Windows(已找到 - 转到下一个单元),SysUtils(未找到) ), WinApi.SysUtils(未找到), System.SysUtils(找到 - 转到下一个单元), ..., System.Classes(找到 - 找到所有必需的单元)。

如果您使用 GUI,通常不会处理这个问题,因为命名空间列表是项目文件的一部分,并且提供了合理的默认值。msbuild.exe如果您使用项目文件从命令行构建应用程序,则同样适用。但如果您使用dcc*.exe*.dpr,那么您必须提供您想要自动应用的命名空间 - 这就是该选项的用途-NS。在我们的示例中,您可以使用-NSWinApi;System.