18

我为 Delphi 编写了很多组件和库,其中大部分都需要使用 BPL 封装,以便它们可以安装到 IDE 中。

这很简单并且运行良好,直到您想要维护一组包项目文件(在单个项目组中),但还想为不同的 Delphi 版本编译和分发这些相同的包。

到目前为止,我一直在为每个 Delphi 版本创建一个不同的包项目,并明确定义一个 Delphi 版本标识符作为后缀(例如Kinect_XE.bplKinect_XE2.bpl)。

我知道,在Package Project的Project Options中,在Description下,有字段LIB prefix和(更重要的是我的需要)LIB suffix

我进一步知道,如果我在LIB suffix中放置一个值,它将被附加到已编译 BPL 文件名的末尾。

然而,我的问题是,首先是否可以让 IDE使用IDE/RTL 版本号自动填充LIB 后缀字段,如果可以……如何?

我相当确定这是可能的,因为看起来vcl120.bpl以及每个相应版本的 Delphi 的对应项)可以仅使用vcl来引用(作为要求)您自己的包,而不必键入完整的vcl120 . 事实上,这也是我希望实现的相同行为……我的包可以相互引用(必要时),而不必提供特定于版本的引用来容纳后缀。

同样重要的是,解决这个问题将使我能够在单个项目组中维护一组项目文件(XE2 明显例外,由于平台添加,它的项目文件不一定与以前版本的 Delphi 表现得很好)。

我怀疑我可能需要在LIB 后缀字段中输入一个类似$(VER)的值(或类似的值) ,但这似乎不起作用,我已经搜索谷歌寻找正确的解决方案。

希望你能帮忙!

更新 1

我现在正在编写一个与(至少)Delphi 2007 到 XE2 一起使用的 IDE 插件,它为 DLL 和 BPL 项目提供了一个名为AutoSuffix的新选项。当切换到 On时,任何安装了AutoSuffix插件的 IDE 都会立即将正确的 IDE 版本后缀应用到项目中。

AutoSuffix插件将在接下来的 24 小时内(免费)供所有人使用,并且此问题会相应更新

更新 2

好的... Delphi 2007 很痛苦!到目前为止,我已经让 AutoSuffix 与 2009 到 XE2 一起工作,但 2007 需要更多时间(请耐心等待)。

更新 3

看起来 Embarcadero 似乎听到了我们对更简单的版本之间的包统一的集体呼声。

Mark 将推动这一点,看看 Delphi 的未来版本是否可以容纳{$LIBSUFFIX AUTO}功能。我希望很快能收到回复,是否会是这样。如果是这样,它肯定会影响AutoSuffix在 XE2 和旧版本上工作的方式(因为目前它不提供简单的 AUTO 开关......它有自己的方法)。

我现在希望 EMB 会认真对待这个请求,将其作为一个完整的功能提供,以便它成为在现有版本上使用AutoSuffix以统一所有版本的流程的简单案例!

4

3 回答 3

7

Delphi 到 XE2 的 AFAIK 没有自动执行此操作。

关于requires子句:当您require使用另一个包时,您实际上正在使用dcp,它不继承 LIBSUFFIX。因此,VCL.dcp在编译时 require 就足够了,而VCL160.bpl在运行时实际使用。DCP 包含完整的 BPL 名称以解决该问题。

这使得 LIBSUFFIX 方法优于简单的“为每个 Delphi 版本重命名包”方法。

类似QC83229中建议的解决方案可以更轻松地将包移植到较新的 Delphi 版本,但您仍然会遇到不向后兼容的 dproj 文件。

我通常为每个 Delphi 版本使用不同的文件夹,其中只存储项目文件。对于一个新的 Delphi 版本,我只需要复制一个文件夹并更改 LIBSUFFIX。

于 2012-01-09T19:40:45.190 回答
3

LIBSUFFIX指令在 *.dpk 文件中,您可以手动编辑 *.dpk 文件。

你可以写,例如

{$IFDEF CONDITIONALEXPRESSIONS}
   {$IF CompilerVersion = 20.0}
{$LIBSUFFIX '120'}
   {$IFEND}
   {$IF CompilerVersion = 21.0}
{$LIBSUFFIX '140'}
   {$IFEND}
{$ENDIF}

坏事是 IDE 不尊重您对 *.dpk 文件的手动编辑并删除它们,然后您在包中进行更改。这就是为什么某些在 *.dpk 文件中使用条件定义的组件供应商在要求保存更改时在安装说明中说“不”的原因。

于 2012-01-09T17:23:48.303 回答
2

我的建议是将其添加为项目选项集的可配置选项(请参阅QC #86491。)与其更新所有包,更新单个选项集文件就足够了。

事实上,似乎该DllSuffix标签已被 Delphi XE/XE2 中的选项集文件识别。添加<DllSuffix>160</DllSuffix><PropertyGroup>选项集文件的部分将导致后缀附加到项目管理器中的包中。但是,您仍然必须打开项目选项并单击“确定”才能将其保存到 .dpk 文件中。

我同意这个功能非常有用(我认为 RTL 中的包也是如此。)

于 2012-05-20T15:39:09.417 回答