具有第三方组件的项目目录结构

Ali*_*lik 8 delphi build-automation components project-structuring

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

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

  \Project
     \build\output   
     \dist\release
     \dist\debug
     \doc
     \env
     \res
     \src

\src目录包含*.pas*.dfm文件和project.dpr.各种资源(图标,图像和字体)都驻留在\res目录中.\env用于创建各种环境以进行调试.IDE已设置为将project.exe构建到此目录中.构建脚本存储在build文件夹中.借助于这些脚本在dist\releasedist\debug文件夹中生成产品分发(在exe中有和没有调试信息)dcc32.exe.build\output用于在IDE内部或构建脚本内部的构建过程中保存dcu文件.

我的方法有一点缺陷.我不能从新的计算机,我的仓库的结账代码开始,开始构建脚本并接收准备使用项目的分配.我需要先打开IDE,安装所需的组件(例如RXLibMemoEx),设置库路径等等.只有在那些步骤之后我才能运行我的构建脚本.

直到上周才出现这个问题.我修改了第三方组件以修复错误(此组件不再维护:-(),所以我必须将此组件的代码添加到我的项目结构中.此时如果我将从我需要检查repo是否有第三方库的代码更改.如果更改了libs的代码,我需要重新编译组件并重新安装它们.

问题

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

小智 6

  1. 您只需使用delphi命令行编译器编译包.如果Delphi bin路径在您的位置PATH,则无需对安装路径进行硬编码.如果您的构建系统能够从注册表中读取,那么您将获得路径,例如HKEY_LOCAL_MACHINE\SOFTWARE\CodeGear\BDS\6.0\RootDir(在本例中为Delphi 2009).

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

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


Rob*_*ove 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'

在构建所有第 3 方组件后,我们使用 FinalBuilder 更新此内容。它使每个开发人员更容易保持同步。

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

根目录...

C:\dev\trunk\
Run Code Online (Sandbox Code Playgroud)

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

C:\dev\branch1\
Run Code Online (Sandbox Code Playgroud)

从那里我执行以下操作:

我使用 \Bin 和 \DCU 的公共目录,因为我进行了大量的包开发,其中许多需要在设计时加载。这可以避免必须向系统路径添加许多目录才能使 Delphi 满意。

\output\DelphiXE\Bin
\output\DelphiXE\Dcu
Run Code Online (Sandbox Code Playgroud)

如果需要的话可以这样增强:

\output\DelphiXE\Release\Bin
\output\DelphiXE\Release\Dcu
\output\DelphiXE\Debug\Bin
\output\DelphiXE\Debug\Dcu
Run Code Online (Sandbox Code Playgroud)

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

\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...
Run Code Online (Sandbox Code Playgroud)

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

\Commonlib\ (Directory for my code that common among projects)
\Components\3rdPartyName\
\Components\3rdPartyName2\
\Components\3rdPartyName3\
Run Code Online (Sandbox Code Playgroud)

我这样做是为了通过仅使用版本控制修订号来了解构成我的应用程序版本 X 的所有内容。

最重要的是,我创建了一个环境变量

C:\DEV\主干\

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

%MYCODE%components\3rdParty1;%MYCODE%components\3rdParty2\
Run Code Online (Sandbox Code Playgroud)

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