1

我对整个德尔福生态系统非常陌生。我正在使用 Rad Studio XE2。

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

项目 A、B 和 C。C 依赖于 B。B 依赖于 A。

这也是我使用“项目依赖项”IDE GUI 设置依赖项的方式。

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

如果我修改项目 B 中的文件并按 F5(运行),我希望只有项目 B 和 C 可以编译。

但是项目 A 总是重建!!即使我修改项目 C 中的源文件也是如此。

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

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

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

当我发现 XE2 中的“项目依赖”功能时,我认为这将是解决这个问题的方法。

* 编辑 *

行。我会尝试更好地解释这一点,因为我看到我的问题/担忧并没有真正得到解决。

我有一个 groupproject,它由许多 BPL 项目(据我了解输出一个 DLL)和一个可执行项目:C.exe 组成。

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

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

4

3 回答 3

4

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

项目 > 依赖项

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

您看到的行为是有意的。

于 2013-04-04T07:24:32.180 回答
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

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

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

祝你好运。

于 2013-04-04T05:54:37.440 回答
1

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

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

Delphi IDE 的依赖系统是一个可悲的小技巧。命令行构建不是一个真正的 C 风格的 make 系统,当涉及到 Delphi 时,它更像是一个蛮力的每次重新构建的解决方案。但是,因为这就是持续集成(在服务器上运行时)通常会做的事情,并且您可以在继续处理另一个项目的同时运行这样的命令行构建,我发现这是一种“不必担心”的可行方法依赖问题和构建订单”,这是我的根本问题。

于 2013-04-05T03:43:34.430 回答