在我的Delphi中,每当我重建我的应用程序时,所有第三方组件的DCU文件都会在可执行文件所在的应用程序目录中生成。
如何更改此行为?
因此,不会在我的应用程序目录中生成第三方组件的DCU文件。
答案 0 :(得分:7)
编译器生成的.dcu文件都在同一目录中创建。因此,无法将生成的.dcu文件文件放入不同的目录中,并将第三方库中的文件与源文件中的文件分开。
但是,将.dcu文件放在与源文件相同的目录中通常是个坏主意。这只会让事情变得混乱。最佳做法是将.dcu文件放入项目的子目录中。编译器选项允许您执行此操作。打开编译器选项对话框,将目标下拉列表更改为所有配置 - 所有平台。这是其他配置继承的基本配置。对话框如下所示:
您需要更改的设置是单位输出目录。上图显示了XE2上新项目的默认值。编译器扩展了值.\$(Platform)\$(Config)
。因此,如果要构建针对Win32平台的调试配置,则.dcu文件将输出到.\Win32\Debug
。
此处记录了编译器选项:http://docwiki.embarcadero.com/RADStudio/en/Delphi_Compiler
单位输出目录的描述是:
指定包含
.dcu
的单独目录。
另一个密切相关的选项是输出目录。这是编译的可执行文件的放置位置。如果您的目标是多个平台,那么您确实需要将此可执行文件放在主项目目录以外的其他位置。否则,自动化构建变得困难且容易出错。当你真正想要64位可执行文件时,很容易找到过时的32位可执行文件。
所以我的建议是使用默认的.\$(Platform)\$(Config)
,因为它是一个很好的默认值。
答案 1 :(得分:1)
我通常在我的源存储库中创建一个COMP \文件夹,我将在此处显示为文件夹树:
root
|
comp\
| |
| |-- TMS\ - TMS component set
| |
| |-- JEDI\ - Jedi VCL and JCL
| |
| |-- Something\ - Your other favorite component
|
app\ - My application source code.
在comp \文件夹下,我创建了以下其他DCU文件夹:
comp\
|
LIB\
|
DXE4\
我的所有组件包(.dpk + .dproj)都被修改为构建并输出到comp\LIB\
xxx 文件夹,其中 xxx 是一个短代码这是指特定的delphi版本。
然后从我的delphi root\App\MyApp1
文件夹中,我有一个APP \ DCU \ DXE4文件夹,这是DCU文件用于我的主应用程序项目App.dproj
的位置。 Project Search Path
App.Dproj
拉入已编译的DCU,DFM和RES文件,这些文件位于comp \ LIB \ DXE4中。这意味着App \ projects不会从源代码文件重建我的组件。这加快了编译速度。
正如David指出的那样,每个项目只有一个指定的DCU OUTPUT
文件夹。因此,我的组件.dpk包编译的DCU OUTPUT文件夹的文件夹在我的应用程序(.dpr + .dproj)编译阶段成为库INPUT文件夹。
因为我需要在COMP \ LIB \ DXE4文件夹中同时提供.dfm,.res和.dcu文件,所以我有一个批处理文件(buildcomp.cmd),它可以完成所有构建,以及制作LIB \ DXE4文件夹包含它必须包含的所有内容。我不检查LIB ...文件夹的内容到我的版本控制系统。它们是我的Component Build阶段的二进制和输出产品。保持组件构建阶段和应用程序构建完全分离是一种更具可扩展性的方法,适用于大型应用程序和更大的组件集。
我选择将BPL和DCP文件保留在默认位置(%(BDSCOMMONDIR)\BPL
下),但有些人选择将其BPL和DCP文件重定向到他们的COMP\LIB\DXE4
等效文件夹中。 Delphi开发人员之间没有统一的标准行为,每个开发人员或公司似乎都在为他们工作。沼泽标准德尔福的做法是完全忽略这些做法并尽可能地混乱,所以你开始甚至提出这样一个问题的事实说明了你必须注意到你可能希望有一些混乱的值得称道的倾向。如果某些结构对您或您的公司有利,则施加某种形式的结构。