我必须维护用Delphi编写的旧软件。源树真是一团糟。我正在尝试做两件事:制作干净的目录结构并设置自动构建过程。
现在我已经制作了以下目录树
\Project \build\output \dist\release \dist\debug \doc \env \res \src
\src
目录包含*.pas
和*.dfm
个文件以及project.dpr
。各种资源(图标,图像和字体)驻留在\res
目录中。 \env
用于创建各种环境以进行调试。 IDE已设置为将project.exe构建到此目录中。
构建脚本存储在build
文件夹中。这些脚本在dist\release
的帮助下在dist\debug
和dcc32.exe
文件夹中生成产品分发(在exe中有和没有调试信息)。 build\output
用于在IDE内部或构建脚本内部的构建过程中保存dcu文件。
我的做法有一点缺陷。我不能从新的计算机,我的仓库的结账代码开始,开始构建脚本并接收准备使用项目的分配。我需要先打开IDE,安装所需的组件(例如RXLib
和MemoEx
),设置库路径等等。只有在那些步骤之后我才能运行我的构建脚本。
直到上周才出现这个问题。我修改了第三方组件以修复错误(此组件不再维护:-(),所以我必须将此组件的代码添加到我的项目结构中。此时如果我将从我需要检查repo是否有第三方库的代码更改。如果库的代码被更改,我需要重新编译组件并重新安装它们。
问题
bpl
和dcu
。我应该把它们放在Project\build\output
吗?或者最好将输出放到另一个位置(不要覆盖Delphi设置),但是在项目配置中更改库路径?答案 0 :(得分:6)
您只需使用delphi命令行编译器编译包。如果Delphi bin路径在您的PATH
中,则您不必对安装路径进行硬编码。如果您的构建系统能够从注册表中读取,您将获得路径,例如HKEY_LOCAL_MACHINE\SOFTWARE\CodeGear\BDS\6.0\RootDir
(本例中为Delphi 2009)。
我会为每个包添加另一个分支components
和子分支。不要将它们与您的项目混合。
根据我的经验,最好的方法是将它们保存在delphi目的地(取决于delphi版本)。
答案 1 :(得分:4)
更新:注意到从命令行安装请求部分问题。
您无法从命令行安装,但构建内容很容易 那样做了。您可以使用DCC32.EXE编译包。
组件的安装由注册表项控制。对于每个版本的Delphi,注册表中的位置都不同,但它确实遵循相同的基本模式。 例子:
Delphi 2007
HKEY_CURRENT_USER\Software\Borland\BDS\5.0\Known Packages
德尔福XE
'HKEY_CURRENT_USER \ Software \ Embarcadero \ BDS \ 8.0 \ Known Packages'
在我们构建了所有第三方组件之后,我们使用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...
最终用于不同项目的组件和代码。
\Commonlib\ (Directory for my code that common among projects)
\Components\3rdPartyName\
\Components\3rdPartyName2\
\Components\3rdPartyName3\
我是这样做的,所以我知道我的应用程序的X版本只需使用版本控制版本号即可。
为此,我为
创建了一个环境变量C:\ DEV \ TRUNK \
然后我在系统库路径中使用环境变量。 像这样:
%MYCODE%components\3rdParty1;%MYCODE%components\3rdParty2\
然后,如果我必须切换分支,我可以更改环境变量重新启动Delphi以及使用该版本代码库的所有内容。
答案 2 :(得分:3)
1:是和否,您可以从命令行设计您自己的组件(其中“从命令行”意味着以编程方式安装它们,如果您真的需要命令行,那么您可能需要编写工具)。第三方组件通常附带一个安装程序,该安装程序会执行更多操作并自行安装和注册组件从理论上讲,您可以自动执行安装程序所做的一切,并基本上重新打包组件供您自己使用,但您可能会遇到法律障碍。
2:第三方组件与项目无关。将这些文件存储在项目目录中并不是一个好主意。当您在其他项目中重用相同的组件时会发生什么?您是否将所有源文件复制到新项目?对于我自己的工作,我已将所有第三方组件安装到一个文件夹中,与任何项目的目录分开,并且我将该文件夹保留在版本控制之下。
3:为每个项目使用单独的输出目录是个好主意,它使得使用条件编译变得更加容易。我建议为Debug和Release分别输出目录。关于第三方BPL,它们也不属于该项目,因为没有一个项目“拥有它们”。