Delphi中的依赖项自动编译

Delphi中的依赖项自动编译,delphi,delphi-xe2,Delphi,Delphi Xe2,我对整个德尔福生态系统非常陌生。我正在使用Rad Studio XE2 假设我有一个非常简单的案例 项目A、B和C。 C依赖于B。 B依赖于A 这也是我使用“项目依赖项”IDEGUI设置依赖项的方式 C是生成可执行文件的项目。它被设置为“当前项目” 如果我修改项目B中的一个文件并点击F5Run,我只希望编译项目B和C 然而,项目A总是被重建!!即使我在项目C中修改了源文件,情况也是如此 我做错什么了吗?如果是的话,有什么想法吗 或者这就是IDE的工作方式 客户有一个很大的遗留代码库,并使用XE2

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

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

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

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

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

如果我修改项目B中的一个文件并点击F5Run,我只希望编译项目B和C

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

我做错什么了吗?如果是的话,有什么想法吗

或者这就是IDE的工作方式

客户有一个很大的遗留代码库,并使用XE2。目前,他们正在手动处理依赖项目的重新编译,方法是右键单击需要重新编译的最低项目,然后选择“从此处构建…”

当我在XE2中发现“项目依赖性”特性时,我认为这将是这个问题的解决方案

*编辑*

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

我有一个groupproject,它由许多BPL项目组成,据我所知,这些项目输出一个DLL和一个可执行项目:C.exe

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


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

首先,您可以说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,BPLs aso。尝试通过创建一个名为“hidden”的子文件夹或其他方式来“隐藏”它们。在此之后,如果需要,修复项目A、B和C的输出目录结构,并为所有内容重新构建。之后,查看问题是否仍然存在

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


祝你好运。

首先,你说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,BPLs aso。尝试通过创建一个名为“hidden”的子文件夹或其他方式来“隐藏”它们。在此之后,如果需要,修复项目A、B和C的输出目录结构,并为所有内容重新构建。之后,查看问题是否仍然存在

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


祝你好运。

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

项目>依赖项

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


你看到的行为是故意的。

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

项目>依赖项

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


您看到的行为是有意的。

对于具有复杂构建依赖关系的项目,我通常只需制作一个外部构建脚本,并按照已知的工作顺序构建内容。也就是说,我不完全从IDE工作,只需转到命令提示符并键入build和我编写的批处理文件build.cmd,负责清理以前的DCU,多次运行msbuild来构建我需要构建的所有内容,然后 这样我就有了可重复的、易于构建的产品

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


DelphiIDE的依赖系统是一个令人伤心的小黑客。命令行构建并不是一个真正的C风格的make系统,当涉及到Delphi时,它更像是一个强力的每次完全重建的解决方案。然而,由于在服务器上运行的持续集成通常都是这样做的,而且您可以在继续处理另一个项目的同时运行这样的命令行构建,因此我发现这是一种可行的方法,不再需要担心依赖性问题和构建顺序,这是我的根本问题。

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

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


DelphiIDE的依赖系统是一个令人伤心的小黑客。命令行构建并不是一个真正的C风格的make系统,当涉及到Delphi时,它更像是一个强力的每次完全重建的解决方案。然而,由于在服务器上运行的持续集成通常都是这样做的,而且您可以在继续处理另一个项目的同时运行这样的命令行构建,因此我发现这是一种可行的方法,不再需要担心依赖性问题和构建顺序,这是我的根本问题。

对于GExperts,您可以更改IDEshortcuts@ComputerSaysNo事实上,我已经将它们设置为与Visual Studio快捷方式匹配。John感谢您的回答。不幸的是,这对我来说不是很清楚,因为我还不能理解所有的术语,因为到目前为止我只有几天的德尔福经验。“你是说我想做的应该行得通吗?”圣地亚哥:好的,我明白了。让我们简单一点:DCU是Delphi编译的单元。每次编译器认为有必要时,都会重新生成这些文件。上面的一种情况表明,您可能存在以下问题:项目使用文件夹c:\My\u Old\u DCU中的DCU,而IDE中的选项在某个时间发生了更改,将新DCU放入c:\My\u new\u DCU中。IDE发现旧DCU与源不同步,并触发重建。这就是为什么我告诉你搜索并删除所有DCU的原因-也许这会帮助你找到/解决问题。@ComputerSaysNo谢谢你的解释!这不适用于我的情况。无论如何,我更新了问题。希望现在更清楚一点。使用GExperts,您可以更改IDEshortcuts@ComputerSaysNo事实上,我已经将它们设置为与Visual Studio快捷方式匹配。John感谢您的回答。不幸的是,这对我来说不是很清楚,因为我还不能理解所有的术语,因为到目前为止我只有几天的德尔福经验。“你是说我想做的应该行得通吗?”圣地亚哥:好的,我明白了。让我们简单一点:DCU是Delphi编译的单元。每次编译器认为有必要时,都会重新生成这些文件。上面的一种情况表明,您可能存在以下问题:项目使用文件夹c:\My\u Old\u DCU中的DCU,而IDE中的选项在某个时间发生了更改,将新DCU放入c:\My\u new\u DCU中。IDE发现旧DCU与源不同步,并触发重建。这就是为什么我告诉你搜索并删除所有DCU的原因-也许这会帮助你找到/解决问题。@ComputerSaysNo谢谢你的解释!这不适用于我的情况。无论如何,我更新了问题。希望现在能更清楚一点。我可能期待着与其他IDE(如VisualStudio)相同类型的行为。通常,存在依赖项是为了让IDE知道它必须构建某个项目,因为至少有一个依赖项已被修改。我正在努力寻找明显盲目地重新编译依赖项目的有用之处。如果只修改了项目B,为什么会有人需要重建项目A?你在德尔福工作吗?您如何处理这种情况?能否详细说明这些依赖项的外观?当项目A中的某些内容发生变化时,是什么使得项目B需要重新编译?请参考问题的更新。我希望它现在更清楚了。我可能期待着与其他IDE(如VisualStudio)相同类型的行为。通常,存在依赖项是为了让IDE知道它必须构建某个项目,因为至少有一个依赖项已被修改。我正在努力寻找明显盲目地重新编译依赖项目的有用之处。如果打开
如果项目B被修改,为什么有人需要重建项目A?你在德尔福工作吗?您如何处理这种情况?能否详细说明这些依赖项的外观?当项目A中的某些内容发生变化时,是什么使得项目B需要重新编译?请参考问题的更新。我希望现在更清楚。谢谢你的回答。如果您不介意查看我刚才添加到问题中的更新。您的回答似乎表明我所追求的是DelphiIDE无法实现的。这将是一个小问题。正如您所注意到的,编译是delphi中的依赖性检查,附带条件是它跳过所有可以跳过的编译,然后每次都重复链接。谢谢您的回答。如果您不介意查看我刚才添加到问题中的更新。您的回答似乎表明我所追求的是DelphiIDE无法实现的。正如您所注意到的,编译是delphi中的依赖性检查,附带条件是它跳过所有可以跳过的编译,然后每次重复链接。