这很简单,工作得很好,直到你想要维护单个包项目文件(在一个项目组中),而且还要为不同的Delphi版本编译和分发这些相同的包.
到目前为止,我已经为每个版本的Delphi创建了一个不同的软件包项目,并将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的新选项.当切换为开启时,安装了AutoSuffix插件的任何IDE将立即将正确的IDE版本后缀应用于项目.
AutoSuffix插件将在随后的24小时内随时提供(免费),并且相应地更新此问题.
更新2
好的… Delphi 2007正在痛苦!到目前为止,我已经将AutoSuffix与2009年的XE2配合使用,但2007年需要更多的时间(耐心赞赏).
更新3
Embarcadero看起来好像听到了我们对版本之间更简单的包装统一的集体呼声.
马克将要推动这一点,看看未来版本的Delphi是否可以容纳{$LIBSUFFIX AUTO}功能.我希望很快听到这是否会是这样.如果是这样,它肯定会影响AutoSuffix在XE2和旧版本上工作的方式(目前它不提供简单的AUTO开关..它有自己的方法).
我现在希望的是,EMB将会认真对待这个请求,将其作为前进的一个整体功能提供,使其成为在现有版本上使用AutoSuffix来统一所有版本的过程的简单情况!
解决方法
关于require子句:当你需要另外一个包的时候,你实际上使用的是不继承LIBSUFFIX的dcp.因此,在编译期间需要VCL.dcp就足够了,而VCL160.bpl实际上是在运行时使用的. DCP包括完整的BPL名称来解决这个问题.
这使得LIBSUFFIX方法优于简单的“为每个版本的Delphi重命名包”之一.
像QC83229这样建议的解决方案可以更容易地将软件包移植到更新的Delphi版本,但是您仍然坚持不能向后兼容的dproj文件.
我通常为每个Delphi版本使用不同的文件夹,其中只存储项目文件.对于新的Delphi版本,我只需要复制一个文件夹并更改LIBSUFFIX.