8

我必须维护用 Delphi 编写的旧软件。源代码树真是一团糟。我正在尝试做两件事:制作干净的目录结构并设置自动构建过程。

现在我已经制作了以下目录树

  \项目
     \构建\输出   
     \dist\发布
     \dist\调试
     \文档
     \环境
     \res
     \src

\src目录包含*.pas*.dfm文件和project.dpr. 各种资源(图标、图像和字体)都驻留在\res目录中。\env用于创建用于调试目的的各种环境。IDE 设置为将 project.exe 构建到此目录中。构建脚本存储在build文件夹中。dist\release这些脚本dist\debugdcc32.exe. build\output用于在 IDE 或构建脚本内部的构建过程中保存 dcu 文件。

我的方法有一个小缺陷。我无法从新计算机开始,从我的回购中签出代码,开始构建脚本并接收准备使用的项目分发。我需要先打开 IDE,安装所需的组件(例如RXLibMemoEx),设置库路径等等。只有在这些步骤之后,我才能运行我的构建脚本。

直到上周,这还不是什么大问题。我已经修改了第 3 方组件以修复错误(此组件不再维护 :-(),因此我必须将此组件的代码添加到我的项目结构中。此时如果我将从repo 我需要检查 3rd 方库的代码是否有变化。如果库的代码发生了变化,我需要重新编译组件并重新安装它们。

问题

  1. 有没有办法从命令行重新安装 Delphi 7 中的组件?没有硬编码D7的安装路径有什么办法吗?
  2. 您将如何在项目树中存储第三方组件的代码?
  3. 我应该在哪里放置bpl以及dcu在构建组件期间将产生哪些。我应该把它们放在Project\build\output吗?或者最好将输出放置到另一个位置(不要覆盖Delphi设置),但是在项目配置中更改库路径?
4

3 回答 3

6
  1. 你只需要使用 delphi 命令行编译器来编译这个包。如果 Delphi bin 路径在您的目录中,则PATH您不必对安装路径进行硬编码。如果您的构建系统能够从注册表中读取,您将获得路径,例如HKEY_LOCAL_MACHINE\SOFTWARE\CodeGear\BDS\6.0\RootDir(在本例中为 Delphi 2009)。

  2. 我会components为每个包添加另一个带有子分支的分支。不要将它们与您的项目混合使用。

  3. 根据我的经验,最好的做法是将它们保存在 delphi 目的地(取决于 delphi 版本)。

于 2011-04-21T19:56:22.477 回答
4

更新:注意到从命令行请求安装问题的一部分。

您不能真正从命令行安装,但很容易构建可以做到这一点的东西。您可以使用 DCC32.EXE 编译包。

组件的安装由注册表项控制。每个版本的 Delphi 在注册表中的位置都不同,但它遵循相同的基本模式。例子:

Delphi 2007 HKEY_CURRENT_USER\Software\Borland\BDS\5.0\Known Packages Delphi XE 'HKEY_CURRENT_USER\Software\Embarcadero\BDS\8.0\Known Packages'

在我们构建了所有 3rd 方组件之后,我们使用 FinalBuilder 对其进行了更新。它使每个开发人员保持同步变得更加容易。

至于目录结构,我会预先考虑版本控制并执行以下操作。

根目录...

C:\dev\trunk\

这使我能够以简单的格式创建分支。

C:\dev\branch1\

从那里我执行以下操作:

我为 \Bin 和 \DCU 使用了一个公共目录,因为我做了很多包开发,其中许多需要在设计时加载。这避免了必须将许多目录添加到系统路径以使 Delphi 满意。

\output\DelphiXE\Bin
\output\DelphiXE\Dcu

如果需要,这可以增强:

\output\DelphiXE\Release\Bin
\output\DelphiXE\Release\Dcu
\output\DelphiXE\Debug\Bin
\output\DelphiXE\Debug\Dcu

对于每个项目,我都会这样做,尽管如果依赖于大部分相同的代码,我经常将多个项目放在同一个目录中。

\project\ (DPR/DPK Here)
\project\source (if the project is small, if not I break it out further)
\project\forms\
\project\classes\
\project\datamodules\
\project\resources\
\project\install\ (Install Scripts)
etc...

finally 用于不同项目通用的组件和代码。

\Commonlib\ (Directory for my code that common among projects)
\Components\3rdPartyName\
\Components\3rdPartyName2\
\Components\3rdPartyName3\

我这样做是为了让我知道每件事都是通过使用版本控制修订号来构成我的应用程序版本 X 的。

最重要的是,我为

C:\开发\主干\

然后我在系统库路径中使用环境变量。像这样:

%MYCODE%components\3rdParty1;%MYCODE%components\3rdParty2\

然后,如果我必须切换分支,我可以更改环境变量重新启动 Delphi 以及使用该版本代码库的所有内容。

于 2011-04-22T00:54:43.193 回答
3

1:是与否,您可以设计自己的组件以从命令行安装(其中“从命令行”意味着以编程方式安装它们,如果您真的需要命令行,您可能需要编写该工具)。3rd 方组件通常附带一个安装程序,该安装程序执行的操作比安装和注册组件本身还多。从理论上讲,您可以自动化安装程序所做的一切,并从本质上重新打包组件以供您自己使用,但这样做可能会遇到法律障碍。

2:第 3 方组件与项目无关。将这些文件存储在项目目录中并不是一个好主意。当您在其他项目中重用相同的组件时会发生什么?您是否将所有源文件复制到新项目中?对于我自己的工作,我将所有 3rd 方组件安装到一个文件夹中,与任何项目的目录分开,并且我将该文件夹置于版本控制之下。

3:为每个项目使用单独的输出目录是个好主意,它使条件编译的使用更加容易。我建议 Debug 和 Release 使用单独的输出目录。关于第 3 方 BPL,它们也不是项目的一部分,因为没有单个项目“拥有它们”。

于 2011-04-21T19:58:32.433 回答