我为Delphi编写了许多组件和库,其中大多数组件和库都需要使用BPL打包,以便将它们安装到IDE中。
这很简单,而且运行良好,直到您想要维护一组单独的包Project (在单个Project中),但也希望为不同的Delphi版本编译和分发相同的包。
到目前为止,我已经为每个版本的Delphi创建了一个不同的包项目,并显式地将Delphi版本标识符定义为后缀(例如Kinect_XE.bpl和Kinect_XE.bpl)
我知道,在Package的Project中,下面有字段LIB前缀和(更重要的是为了满足我的需要) LIB后缀。
我还知道,如果我在LIB后缀中添加了一个值,它将被追加到编译的BPL文件名的末尾。
但是,我的问题是,首先,是否可以让IDE自动填充带有IDE/RTL版本号的LIB后缀字段,如果是的话.多么?
我相当肯定这是可能的,因为看起来vcl120.bpl (及其对应的相应版本的Delphi)可以使用vcl来引用(作为需求)您自己的包,而不必键入完整的vcl120。事实上,我希望达到同样的行为.其中,我的包可以互相引用(作为必要的),而不必提供特定版本的引用来容纳后缀。
同样重要的是,解决这个问题将使我能够在一个项目组中维护单个项目文件集(除了XE2之外,由于平台的添加,它的项目文件在以前版本的Delphi中不一定运行得很好)。
我怀疑我可能需要将类似于$(VER) (或类似的东西)的值放在LIB后缀字段中,但这似乎行不通,我已经搜索过谷歌寻找正确的解决方案。
希望你能帮忙!
更新1
我现在正在为XE2编写一个IDE插件(至少与Delphi2007一起使用),这为DLL和BPL项目提供了一个名为AutoSuffix的新选项。当切换时,任何安装了AutoSuffix插件的IDE都会立即将正确的IDE版本后缀应用于项目。
AutoSuffix插件将在今后24小时内(免费)提供给每个人,并相应地更新这个问题。
更新2
好吧..。德尔福2007是一个痛苦!到目前为止,我已经让AutoSuffix在XE2上工作了,但是2007年需要更多的时间(耐心感谢)。
更新3
看起来,Embarcadero似乎听到了我们的集体呼声,要求在不同版本之间实现更简单的包统一。
Mark将推动这一过程,看看Delphi的未来版本是否能够适应{$LIBSUFFIX AUTO}特性。我希望很快就能得到答复,情况是否如此。如果是这样的话,它肯定会影响AutoSuffix在XE2和旧版本上的工作方式(因为目前它没有提供简单的自动开关。它有自己的方法)。
我现在希望EMB会认真对待这一请求,将其作为未来的一个整体特性,从而成为在现有版本上使用AutoSuffix统一所有版本的过程的简单案例!
发布于 2012-01-09 19:40:45
AFAIK的德尔菲到XE2,没有自动做这件事。
关于requires子句:当您使用require另一个包时,实际上使用的是dcp,它不继承LIBSUFFIX。因此,在编译时需要VCL.dcp就足够了,而VCL160.bpl实际上是在运行时使用的。DCP包括完整的BPL名称来解决这个问题。
这使得LIBSUFFIX方法优于简单的“为Delphi的每个版本重命名包”。
QC83229中建议的解决方案可以使将包移植到较新的Delphi版本变得更容易,但这样您仍然只能使用不向后兼容的dproj文件。
我通常对每个Delphi版本使用不同的文件夹,其中只存储项目文件。对于一个新的Delphi版本,我只需复制一个文件夹并更改LIBSUFFIX。
发布于 2012-01-09 17:23:48
LIBSUFFIX指令在*.dpk文件中,您可以手动编辑*.dpk文件。
例如,你可以写
{$IFDEF CONDITIONALEXPRESSIONS}
{$IF CompilerVersion = 20.0}
{$LIBSUFFIX '120'}
{$IFEND}
{$IF CompilerVersion = 21.0}
{$LIBSUFFIX '140'}
{$IFEND}
{$ENDIF}不好的是,IDE不尊重您对*.dpk文件的手工编辑,然后删除它们,然后在包中进行更改。这就是为什么一些在*.dpk文件中使用条件定义的组件供应商,如果被要求保存更改,就在安装指令中说“不行”。
发布于 2012-05-20 15:39:09
我的建议是将它作为一个可配置的选项添加到项目选项集中(请参见QC #86491)。与更新所有包不同,只更新一个选项集文件就足够了。
实际上,Delphi /XE2中的选项集文件似乎可以识别DllSuffix标记。将<DllSuffix>160</DllSuffix>添加到选项集文件的<PropertyGroup>部分将导致将后缀附加到项目管理器中的包中。但是,您仍然必须打开项目选项并单击OK,以便将其保存到.dpk文件中。
我同意这将是非常有用的这个功能(我也认为在RTL中的软件包)。
https://stackoverflow.com/questions/8792059
复制相似问题