我正在从 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 及更高版本中组织包的最佳实践/标准的一般问题的详细信息。