Delphi中的自动依赖编译

时间:2013-04-04 03:01:38

标签: delphi delphi-xe2

我是整个Delphi EcoSystem的新手。我正在使用Rad Studio XE2。

假设我有一个非常简单的案例。

项目A,B和C. C依赖于B. B依赖于A.

这也是我使用'Project Dependencies'IDE GUI设置依赖项的方法。

C是生成可执行文件的项目。它被设置为“当前项目”。

如果我修改项目B中的文件并点击F5(运行),我希望只编译项目B和C.

但是项目A总是被重建!!即使我在项目C中修改源文件,情况也是如此。

我做错了吗?如果是这样,任何关于它可能是什么的想法?

或者这只是IDE的工作方式?

客户拥有大量遗留代码库并使用XE2。目前,他们通过右键单击需要重新编译的最低项目并选择“Build From Here ...”来手动处理依赖项目的重新编译。

当我在XE2中发现'Project Dependencies'功能时,我认为这可以解决这个问题。

*编辑*

确定。我将尝试更好地解释这一点,因为我看到我的问题/关注并没有真正实现。

我有一个groupproject,它包含许多BPL项目(据我所知输出一个DLL)和一个可执行项目:C.exe。

C.exe引用所有BPL项目,包括A.BPL和B.BPL。 现在,如果我修改任何BPL项目中的代码并执行'Run',则会启动C.exe,但我刚才所做的更改不会生效,因为BPL项目没有重新编译。这实际上是我的痛点。我到目前为止使用的所有IDE都会重新编译依赖的dll。当然,假设项目设置正确。现在问我的问题。我不知道项目是否设置不正确或者这是否是IDE的限制。 如果我右键单击修改后的BPL项目并选择“从此处编译”,然后执行“运行”,我的更改将生效。但是,当我习惯于只运行可执行文件而不必担心重新编译依赖项时,必须这样做非常烦人。

如上所述,我尝试使用IDE的“依赖关系”功能。然而,这种行为很奇怪(对我来说)。即使未修改源代码,它也会重新编译依赖项。

3 个答案:

答案 0 :(得分:4)

你的期望是错误的。文档说:

项目>依赖

在项目组中创建项目依赖项。从列表中,选择要在构建所选项目之前构建的项目。

您看到的行为是预期的。

答案 1 :(得分:2)

首先,你说“F5(跑步)”。这是F9 ......

其次,您的系统可能存在时间问题。 DCU被一个过程或类似的东西触及。

第三,你可以弄乱目录。你有:

Tools|Options
Environment Options|Delphi Options|Library-Win32
    (1) "Library Path:" Edit Box
    (2) "Debug DCU Path:" Edit Box

此外,打开您的项目

Project | Options
Directories/Conditionals
(3) Search Path: Edit Box

看看你有没有问题。此外,尝试从任何地方删除 ALL DCU(另请参见Temp目录等)。此外,如果你有DPK,BPLs aso。尝试通过创建一个名为“隐藏”(或其他)的子文件夹来“隐藏”它们。在此之后,如果需要,修复项目A,B和C的(输出)目录结构,并为所有内容进行全新构建。在此之后,查看问题是否仍然存在。

第四,你可以有一个在C和A中使用的单位。如果你为“项目C”改变它,当然它会触发A的重建。

祝你好运。

答案 2 :(得分:1)

对于具有复杂构建依赖关系的项目,我通常只需创建一个外部构建脚本,并按照已知可行的顺序构建事物。也就是说,我只是转到命令提示符并输入build和我编写的批处理文件(build.cmd),而不是纯粹从IDE工作,负责清理以前的DCU,运行msbuild多次构建我需要构建的所有东西,这样我就可以重复生成易于构建的产品。

在其中一个项目上开发时,我可能会在IDE中工作一段时间,但我总是会返回到这些情况的命令行构建。

Delphi IDE的依赖系统是一个令人伤心的小黑客。命令行构建不是真正的C风格的make系统,当涉及Delphi时,它更像是一个蛮力的全重建 - 每次解决方案。但是,正如那种持续集成(在服务器上运行)通常无论如何都是这样,并且当你继续在另一个项目上工作时可以运行这样的命令行构建时,我发现它是一种可行的方式“不必担心依赖问题和建立订单“,这是我的根本问题。