Delphi 2007及更高版本中的编译器(dcc32.exe)有一个选项
-NS<namespaces> = Namespace search path
这是否与项目选项对话框中的编译器选项“默认命名空间”和“命名空间前缀”有关?搜索“路径”听起来像文件夹(目录)名,所以我不确定该选项的用途。
hk8txs481#
此设置的目的是提供一个前缀列表,用于搜索未完全限定的单元名称。例如,在旧的 Delphi 版本中,通常在单元的interface部分中包含如下内容:
uses Windows, SysUtils, Classes;
这将指示编译器在尝试定位未知标识符时使用Windows、SysUtils和Classes单元。在更现代的 Delphi 中,它的工作方式大致相同,只是单位不再称为Windows或SysUtils,而是WinApi.Windows或System.SysUtils。如果你只使用Windows或SysUtils,它们将不会被找到。但是,当然,没有人想用新的单元名重写所有的源代码。 Delphi 编译器提供了一个选项,如果没有找到确切的单元名,可以默认指定要搜索的名称空间。在上面的例子中,我们可以将默认名称空间设置为WinApi;System,然后所有的单元都会被正确地找到。因为 Delphi 编译器会尝试搜索Windows(未找到),WinApi.Windows(已找到-转至下一个设备)、SysUtils(未找到)、WinApi.SysUtils(未找到)、System.SysUtils(已找到-转至下一个设备)、...、System.Classes(已找到-已找到所有所需设备)。如果使用GUI,通常不会处理这个问题,因为名称空间列表是项目文件的一部分,并且提供了一个合理的默认值。如果使用msbuild.exe和项目文件从命令行构建应用程序,这同样适用。但如果使用dcc*.exe和*.dpr,那么你必须提供你想要自动应用的名称空间--这就是-NS选项的作用。在我们的例子中,你可以使用-NSWinApi;System。
Windows
SysUtils
Classes
WinApi.Windows
System.SysUtils
WinApi;System
WinApi.SysUtils
System.Classes
msbuild.exe
dcc*.exe
*.dpr
-NS
-NSWinApi;System
1条答案
按热度按时间hk8txs481#
此设置的目的是提供一个前缀列表,用于搜索未完全限定的单元名称。例如,在旧的 Delphi 版本中,通常在单元的interface部分中包含如下内容:
这将指示编译器在尝试定位未知标识符时使用
Windows
、SysUtils
和Classes
单元。在更现代的 Delphi 中,它的工作方式大致相同,只是单位不再称为
Windows
或SysUtils
,而是WinApi.Windows
或System.SysUtils
。如果你只使用Windows
或SysUtils
,它们将不会被找到。但是,当然,没有人想用新的单元名重写所有的源代码。 Delphi 编译器提供了一个选项,如果没有找到确切的单元名,可以默认指定要搜索的名称空间。在上面的例子中,我们可以将默认名称空间设置为
WinApi;System
,然后所有的单元都会被正确地找到。因为 Delphi 编译器会尝试搜索Windows
(未找到),WinApi.Windows
(已找到-转至下一个设备)、SysUtils
(未找到)、WinApi.SysUtils
(未找到)、System.SysUtils
(已找到-转至下一个设备)、...、System.Classes
(已找到-已找到所有所需设备)。如果使用GUI,通常不会处理这个问题,因为名称空间列表是项目文件的一部分,并且提供了一个合理的默认值。如果使用
msbuild.exe
和项目文件从命令行构建应用程序,这同样适用。但如果使用dcc*.exe
和*.dpr
,那么你必须提供你想要自动应用的名称空间--这就是-NS
选项的作用。在我们的例子中,你可以使用-NSWinApi;System
。