我为Delphi编写了许多组件和库,其中大多数组件和库都需要使用BPL Packaging,以便可以将其安装到IDE中。
这很简单并且可以很好地工作,直到您想要维护一组打包项目文件(在一个项目组中),而且还希望针对不同的Delphi版本编译和分发这些相同的软件包。
到目前为止,我已经为每个Delphi版本创建了一个不同的Package Project,并明确定义了Delphi版本标识符作为后缀(例如Kinect_XE.bpl和Kinect_XE2.bpl)。
我知道,在打包项目的“项目选项”的“描述”下,有字段LIB前缀和(更重要的是满足我的需要)LIB后缀。
我进一步意识到,如果我在LIB后缀中放置一个值,它将被附加到已编译BPL文件名的末尾。
但是,我的问题是,首先是否可以让IDE自动使用IDE / RTL版本号填充LIB后缀字段,如果可以,怎么办?
我相当确定这是可能的,因为看起来vcl120.bpl(及其对应于Delphi每个版本的副本)可以仅使用vcl来引用(作为要求)您自己的程序包,而不必键入完整的vcl120 。实际上,这是我希望实现的相同行为……我的程序包可以相互内部引用(必要时),而不必提供特定于版本的引用来容纳后缀。
同样重要的是,解决该问题将使我能够在单个项目组中维护一组项目文件(XE2明显例外,由于平台的添加,其项目文件在Delphi的先前版本中不一定会表现得很好。 )。
我怀疑我可能需要在LIB后缀字段中输入$(VER)(或类似名称)之类的值,但这似乎行不通,我搜寻了Google寻找正确的解决方案。
希望能对您有所帮助!
更新1
我现在正在编写一个IDE插件(至少要与Delphi 2007一起使用)到XE2,它为DLL和BPL项目提供了一个称为AutoSuffix的新选项。启用后,任何安装了AutoSuffix插件的IDE都会立即将正确的IDE版本后缀应用于项目。
AutoSuffix插件将在接下来的24小时内向所有人免费提供,并且该问题也会相应更新。
更新2
好吧……Delphi 2007真让人痛苦!到目前为止,我已经将AutoSuffix与2009一起使用到XE2,但是2007年需要更多的时间(耐心等待)。
更新3
似乎Embarcadero听到了我们对版本之间更简单的软件包统一的集体呐喊。
Mark将继续进行此操作,以查看将来的Delphi版本是否可以提供{$ LIBSUFFIX AUTO}功能。我希望很快能听到这种情况。如果是这样,它肯定会影响AutoSuffix在XE2和更早版本上工作的方式(因为目前它不提供简单的AUTO开关。它有自己的方法)。
我现在的希望是,EMB将认真对待此请求,并将其作为一项不可或缺的功能提供,这样就成为在现有版本上使用AutoSuffix统一所有版本流程的简单案例!
最佳答案
AFAIK for Delphi XE2之前没有自动执行此操作的方法。
关于require子句:当您require
另一个程序包时,您实际上是在使用dcp,它不继承LIBSUFFIX。因此,在编译时要求VCL.dcp
就足够了,而VCL160.bpl
实际上是在运行时使用的。 DCP包含完整的BPL名称以解决该问题。
这使得LIBSUFFIX方法优于简单的“为每个版本的Delphi重命名程序包”。
类似于QC83229中建议的解决方案,可以更轻松地将软件包移植到较新的Delphi版本,但随后您仍然会遇到不向后兼容的dproj文件。
对于每个Delphi版本,我通常使用不同的文件夹,其中仅存储项目文件。对于新的Delphi版本,我只需要复制一个文件夹并更改LIBSUFFIX。
关于delphi - 包(BPL)自动命名后缀,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8792059/