2012-01-09 70 views
14

我为Delphi编写了很多组件和库,其中大部分需要使用BPL Packaging,以便它们可以安装到IDE中。包(BPL)自动命名后缀

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

到现在为止我已经创造了德尔福的每个版本不同的套餐项目,并明确定义一个Delphi版本标识符作为后缀(例如Kinect_XE.bplKinect_XE2.bpl)。

我知道,在一个包项目的项目选项说明,有田野LIB前缀和(更重要的是我的需要)LIB后缀

我进一步意识到,如果我在LIB后缀中放置一个值,它将被追加到编译的BPL文件名的末尾。

我的问题,但是,首先是否有可能有IDE与IDE/RTL版号自动填充LIB后缀场,如果是的话......怎么样?

我相当肯定这是可能的,因为这将只使用看来,vcl120.bpl及其同行德尔福的每个相应的版本)可以被引用(如需要)自己包vcl,而不必输入完整的vcl120。事实上,这是我希望达到的相同行为......我的软件包可以在内部引用彼此(根据需要),而不必提供特定于版本的引用来容纳后缀。

同样重要的是,解决这个问题将使我能够在单个项目组中保留一组项目文件(显然,XE2除外,其项目文件不一定与以前版本的Delphi应有的表现非常好)到平台另外)。

我怀疑我可能需要把一个价值像$(VER)(或类似的东西)在LIB后缀领域,但这似乎没有工作,我已经冲刷谷歌寻找正确解。

希望你能帮助!

更新1

我现在正在写一个IDE插件与(在最起码)一起使用德尔福2007年XE2,这给DLL和BPL项目的新选项称为AutoSuffix。当切换上,安装了AutoSuffix插件的任何IDE都会立即将正确的IDE版本后缀应用于该项目。

The AutoSuffix插件将在未来24小时内为所有人提供(免费),并且相应更新此问题。

更新2

好了...德尔福2007年是正在痛苦!到目前为止,我已将AutoSuffix与2009年的XE2工作在一起,但2007年需要多一点时间(耐心赞赏)。

更新3

好像Embarcadero公司也听到了我们的版本之间simplier包统一的集体呐喊这样看来。

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

我希望现在是,教统局会认真考虑这一请求,提供它作为一个整体特征向前发展,使之成为使用AutoSuffix现有版本统一翻过所有版本的进程的一个简单的例子!

+0

不是编译器版本,而是一个IDE/RTL版本。 – OnTheFly 2012-01-09 16:58:24

+0

正确...编辑!我的一个愚蠢的错误! – LaKraven 2012-01-09 17:01:28

+2

我收到**没有报告#83229,或者您无权查看该报告。**当我尝试访问它时(登录) – LaKraven 2012-01-09 19:26:49

回答

5

对于德尔福达到XE2 AFAIK没有这样做的自动化。

关于需要条款:当你require你实际上是使用DCP,不继承LIBSUFFIX另一个包。因此在编译期间需要VCL.dcp就足够了,而在运行期间实际使用VCL160.bpl。 DCP包含完整的BPL名称以解决该问题。

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

类似于QC83229中提出的解决方案可以更容易地将软件包移植到较新的Delphi版本,但是仍然会遇到不向后兼容的dproj文件。

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

+0

+1,不错的想法。它是否被QC? – kludg 2012-01-09 19:59:54

+0

@Serg:是的,但暂时是私人的。查看评论 – 2012-01-09 20:04:20

+0

我正在构建一个插件来解决我们说的问题! – LaKraven 2012-01-09 20:20:09

3

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

你可以写,例如

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

坏的事情是,IDE不尊重您的* .dpk文件的手动编辑并删除它们,那么你做出一个包的变化。这就是为什么一些使用条件在* .dpk文件中定义的组件供应商如果要求保存更改,请在安装说明中说'不'。

+0

也存储在属性名称为'DllSuffix'下的.dproj文件中。我不知道哪个设置获胜,以及它为什么重复。 – 2012-01-09 17:30:33

+0

另外,这些指令应该位于软件包源代码的最底部,因为系统直到'contains'结束才会在范围内。 – OnTheFly 2012-01-09 17:36:16

+5

德尔福的整个软件包安装是一个地狱。在Delphi 7中,你有两个文件包信息(* .dpk和* .res),现在你有3个文件,有重复,尽管1个文件已经足够了。不幸的是,英巴卡迪诺不在乎。 – kludg 2012-01-09 17:48:48

2

我的建议是将此添加为项目选项集的可配置选项(请参见QC#86491。)而不是更新所有的软件包,只需更新一个选项集文件即可。

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

我同意,这将是这一功能是非常有用的(我也觉得在RTL包。)