我为Delphi编写了很多组件和库,其中大部分都需要使用BPL Packaging才能将它们安装到IDE中。
这很简单并且运行良好,直到你想要维护一组Package Project Files(在一个Project Group中),但是也想为不同的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)(或类似内容)之类的值,但这似乎无法正常工作我一直在寻找正确的解决方案。
希望你能帮忙!
更新1
我现在正在编写一个IDE插件,用于(至少)Delphi 2007到XE2,它为DLL和BPL项目提供了一个名为 AutoSuffix 的新选项。切换 On 时,任何安装了 AutoSuffix 插件的IDE都会立即将正确的IDE版本后缀应用于项目。
AutoSuffix 插件将在接下来的24小时内(免费)为所有人提供,此问题也相应更新。
更新2
好的...... Delphi 2007很痛苦!到目前为止,我已将AutoSuffix与2009年的XE2合作,但2007年需要更多时间(耐心赞赏)。
更新3
似乎Embarcadero听到了我们对版本之间简化包装统一的集体呼声。
马克将推动这一过程,看看未来版本的Delphi是否可以容纳 {$ LIBSUFFIX AUTO} 功能。我希望很快能收到回复是否会出现这种情况。如果是这样,它肯定会影响 AutoSuffix 在XE2和旧版本上运行所需的方式(因为它目前不提供简单的AUTO开关......它有自己的方法)。
我现在希望EMB能够认真对待这个请求,将其作为一个不可或缺的特征提供给它,这样就可以在现有版本上使用 AutoSuffix 来统一整个过程。版本!
答案 0 :(得分:7)
直到XE2的AFAIK for Delphi没有自动化。
关于需要子句:当你require
另一个包时,你实际上使用的是 dcp ,它不会继承LIBSUFFIX。因此,在编译期间需要VCL.dcp
就足够了,而VCL160.bpl
实际上是在运行时使用的。 DCP包含完整的BPL名称以解决该问题。
这使得LIBSUFFIX方法优于简单的“为每个版本的Delphi重命名包”。
像QC83229中建议的那样的解决方案可以更容易地将软件包移植到更新的Delphi版本,但是你仍然坚持使用不向后兼容的dproj文件。
我通常为每个Delphi版本使用不同的文件夹,其中只存储项目文件。对于新的Delphi版本,我只需要复制一个文件夹并更改LIBSUFFIX。
答案 1 :(得分:3)
LIBSUFFIX
指令位于* .dpk文件中,您可以手动编辑* .dpk文件。
你可以写,例如
{$IFDEF CONDITIONALEXPRESSIONS}
{$IF CompilerVersion = 20.0}
{$LIBSUFFIX '120'}
{$IFEND}
{$IF CompilerVersion = 21.0}
{$LIBSUFFIX '140'}
{$IFEND}
{$ENDIF}
糟糕的是IDE不尊重您对* .dpk文件的手动编辑并删除它们然后您在包中进行更改。这就是为什么一些使用* .dpk文件中的条件定义的组件供应商在安装说明中说如果要求保存更改则说“不”。
答案 2 :(得分:2)
我的建议是将其添加为项目选项集的可配置选项(请参阅QC #86491。)而不是更新所有包,只需更新单个选项集文件即可。
实际上,似乎DllSuffix
标记被Delphi XE / XE2中的选项集文件识别。将<DllSuffix>160</DllSuffix>
添加到选项集文件的<PropertyGroup>
部分将导致后缀附加到项目管理器中的包。但是,您仍然必须打开项目选项并单击“确定”才能将其保存到.dpk文件中。
我同意这个功能非常有用(我也会考虑RTL中的软件包。)