是否可以单独根据BPL/DCP构建针对BPL/DCP的EXE项目,其中"Build With Runtime Packages"未经检查?

Edu*_*rdo 4 delphi build bpl dcu delphi-10.1-berlin

我有一个BPL项目(有一些基础东西)和一个EXE项目,它在其搜索路径中有另一个项目输出的位置(BPL和DCP).当使用"Build With Runtime Packages"构建EXE项目时,它构建正常.但是,它需要我部署EXE和BPL.到现在为止还挺好.

因为我宁愿只部署EXE(无论它变大),我猜我只是取消选中"Build With Runtime Packages"并且就是这样,但事实并非如此.它不会构建,并开始抱怨缺少的类.我可以编译EXE项目的唯一方法是将实际BPL项目的DCU路径添加到EXE项目的搜索路径中.我可以这样做,但为什么我被迫指向DCU?德尔福不能把它们从BPL中拿走吗?这不只是一个品味的问题,如果我走这条路,并链接到DCU,当谈到属于表格的DCU时,它会询问我表格DFM,迫使我也将我的来源文件夹包含在EXE中项目的搜索路径,现在它们似乎正在编译,这是令人望而却步的.每次我想编译我的EXE项目时,我都无法重新编译我的BPL项目代码库.

我希望我已经说清楚了.

如何实现标题中提出的任何帮助表示赞赏.

谢谢.

Ari*_*nhh 5

链接外部库有两种方法:静态动态.

使用运行时包时,这是一个动态链接.实际实现在BPL文件中(实际上是一个简单的dll),在进程启动时从中导入方法和类.这会减小exe尺寸,但需要BPL运送文件(与通常的dll相同).DCU不需要文件,因为所有内容都已经编译和链接,链接器只需要创建导入部分.

禁用运行时包时,链接器必须为所有类和方法获取目标文件,并将其合并到一个可执行文件中.它无法从中提取此数据BPL,因为它已经链接了可执行文件.它必须首先取消链接,分离不同的模块实现,这基本上是不可能的.所以你必须提供DCU包含编译目标代码的文件来链接你的程序.

所以回答你的问题标题很简单 - 不可能.