0

我正在从 Delphi 2009 迁移到 Delphi 10.4 Sydney,并且我正在更新我将用于组织我的 Delphi 自定义包的约定。

为了了解 Delphi 10.4 Sydney 中的工作方式,我安装了“LockBox2-2021.05-Sydney”和 Delphi 附带的标准 GetIt 包管理器,这是 Delphi 的最新成员,它显然定义了包应该如何处理的最佳实践/约定被使用和安装。

这些是我的观察:

  • GetIt 将完整的打包项目复制到 BDSCatalogRepository(现在有这样的环境变量)目录,例如 C:\Users<ME>\Documents\Embarcadero\Studio\21.0\CatalogRepository\LockBox2-2021.05-Sydney\ 并且有一个公共目录( /source) 用于.pas/ .dfm/*.fmx 文件和编译器版本相关项目文件的单独目录(例如 \packages\Sydney\Delphi)。
  • GetIt 安装将源目录(在本例中为 $(BDSCatalogRepository)\LockBox2-2021.05-Sydney\source\)添加到“工具 - 选项 - 语言 - Delphi - 库 - 库路径”。
  • 任何 Delphi 项目都会看到完整的库路径(现在包含不同包项目的无数源目录),如果我的 Delphi 项目的任何 *.pas 单元引用了库路径中的任何 *.pas 单元,则 Delphi 编译器重新编译此 *.pas 单元来自库路径,并将生成的 *.dcu 放入项目“单元输出目录”(可以是项目文件夹下的特定目录)。

这行得通,这似乎是 Delphi 10.4 Sydney 的标准处理方式。但这有点奇怪,我应该承认——每个 Delphi 项目都会为它使用的任何包重新编译 dcu。这是好习惯吗?我应该接受这种做法吗?为什么不接受?也许这种过度的重新编译是不必要的,每次都需要重新编译吗?

我的理解是“库路径”的定义对于 Delphi 2009 有点不同(“工具 - 选项 - 环境选项 - Delphi Optios - 库 - Win32 - 库路径”:我们通常以一种方式组织我们的包*.dcu 单元(来自包的源代码)在一个公共目录中,例如 D:/Library/Delphi2009 然后我们将此 D:/Library/Delphi2009 放入“库路径”,任何自定义 Delphi 项目都能够看到pacakges 中的 *.dcu 单元在库路径中可用且可见,任何 Delphi 项目都可以从 D:/Library/Delphi2009 访问这些 dcu 单元,因此,Delphi 2009 无需重新编译包 *.pas 文件每当任何 Delphi 2009 项目使用该包/组件时,将其放入包 *.dcu 单元中。

所以 - 这是对“库路径”含义的重新定义真的很奇怪 - 它是Delphi 2009 时代 .dcu 单元的目录,现在(Delphi 10.4 Sydney 时代)它是包/组件源文件的目录( .pas) 通常对每个项目可见,并且每个项目用于为包/组件编译自己的 *.dcu 单元。

真的对“库路径”的含义进行了这种重新定义吗?我真的应该将我的组件/pacakge 源代码放在我应该包含在“库路径”中的目录中吗?我真的应该要求 Delphi 编译器重新编译 dcu 单元(包的/components) 用于我的每个自定义 Delphi 项目?

当然,形式上我的问题包含多个问题,但这些只是关于如何在 Delphi 10.4 Sydney 及更高版本中组织包的最佳实践/标准的一般问题的详细信息。

4

1 回答 1

2

您对必须进入图书馆路径的内容的看法是正确的。大多数库都遵循这种方法,并将平台 dcu 的路径适当地放入 Library Path 和调试 dcu 路径中。似乎至少有一些 TurboPack 库打破了这种约定,并将源路径放入 Library Path 中。这可能很方便,因为您不必将 dfm 文件复制到这些文件夹中,但这绝对是错误的方法。我建议为此提交一份报告。

于 2022-01-26T09:51:46.883 回答