【问题标题】:How to correctly set "Directories/Conditionals" and "Library" path如何正确设置“目录/条件”和“库”路径
【发布时间】:2011-04-09 04:46:50
【问题描述】:

如何在项目选项中设置“目录/条件”和在环境选项中设置“库”路径? Delphi帮助对这些非常重要的设置不多说。由于我的 VCL 之间的错误依赖关系,我遇到了各种奇怪的错误。

1.

我已将大量第三方控件合并到一个名为 ThirdPartyPackages_D7.dpk 的包中。这在我重新安装 Delphi 时很有用,因为我不必每年重新安装所有这些第 3 方 VCL。

然后,我在 MyControls_D7.dpk 中有自己的控件,它依赖于 ThirdPartyPackages VCL。我还有另一个依赖于 MyControls 的包 BlgPackage.dpk。

链的末端是我的应用程序(DPR 项目),它使用 BlgPackage 中的控件。

ThirdPartyPackages.dpk -> MyControls.dpk -> BlgPackage.dpk -> MyApplication.dpr

当我更改/编辑第二个包 (MyControls.dpk) 并构建 DPR 应用程序时,它可以工作。编译器会看到对该包所做的更改。 但是,如果我关闭项目并加载并编译 BlgPackage,它会抛出一条令人讨厌的消息,指出函数 xyz 在 MyControls 中找不到,因为我删除了它(我已将 MyControls 的单元与应用程序的单元并行加载到 IDE 中)。似乎构建应用程序只会刷新所有使用过的软件包的 DCU 文件,而不是 DCP/BLP 文件。

如何在不将包显式加载到 IDE 并构建它们的情况下编写和编译包中的代码? (注意:我有一个讨厌的错误,它不允许我在不重新启动 IDE 或同时加载一组项目/包 (*.bpg) 的情况下在项目之间切换。)

2.

另一个问题是我想将一个包的编译文件 (DCP/BPL/DCU) 存储在它的文件夹中(例如 c:\MyProjects\Blg)。
如果我将 BlgPackage 包的“输出目录”、“单元输出目录”和“DCP 输出目录”框设置到它的文件夹,那么不仅它的 BPL/DCU/DCP 文件将存储在那里,而且 MyControls 的 BPL/DCP 文件也将存储在那里将存储在那里。 如何将每个包的二进制文件放在单独的文件夹中?


Delphi 7,Win XP,所有项目设置为“根据需要重建”

【问题讨论】:

    标签: delphi


    【解决方案1】:
    1. 你应该明确编译包——仅仅编译包文件是不够的,你已经注意到会导致问题。 在现代 Delphi 版本中,您可以创建一个项目组(不确定 Delphi 7),其中包含一个应用程序和您要使用该应用程序开发的包,您可以轻松地在它们之间切换并编译包,而无需关闭/重新打开应用程序。

    2. BlgPackage 不应访问 MyControls 包源(通过“库”路径或使用同一目录),它应该只访问已编译的 MyControls 包,否则每次构建 BlgPackage 时都会编译来自 MyControls 的文件和编译后的文件存放在 BlgControls DCU 目录中


    添加

    “库”路径应该只指向已编译的文件(.dcp、.dcu)和(如果需要)资源文件(.res、.dfm) - 编译需要“MyControls”包的应用程序和包就足够了.您可以直接在包设置中设置编译文件的目录,并且您应该手动将资源文件(如果需要它们)复制到同一目录。此目录应包含在“库”路径中,否则您可以使用“库”路径中已包含的目录。

    如果您不希望每次构建 BlgPackage 或需要“MyControls”包的应用程序时都编译这些文件,则“库”路径不应指向源文件 (.pas)。

    【讨论】:

    • @Serg-我认为 No2 不会起作用。 Delphi 7 帮助说:“如果您尝试使用不在库路径上的文件构建包,您将收到编译器错误”。所以,如果我从库中删除它的路径,我将无法编译我的包。
    • 我这样做了,现在我无法编译该项目。我找不到其中一个 DCU。该 DCU 属于 MyControls。它位于 MyControls PAS 文件所在的同一文件夹中。
    • @Altar - 将 .dcu 与 .pas 存储在同一文件夹中是一种不好的做法,应该避免。 DCU 应该可以通过“库”路径获得,而源 (.pas) 通常不可用。在任何情况下,如果由于某种原因您不想在包选项中设置 DCU 路径,您可以手动将导致问题的 DCU 复制到通过“库”路径可用的文件夹中。
    • 嗨,军士。如前所述,分离 PAS 和 DCU 文件将使我的项目无法编译。许多其他人(像你一样)说分离文件会提高编译速度。我愿意。但就我而言,它不起作用。
    • 嗨,军士。请解释为什么这是一种不好的做法。
    【解决方案2】:

    我对第 3 方组件和重新安装 Delphi 使用了更简单的方法。

    • 打开注册表并找到 [HKEY_LOCAL_MACHINE/SOFTWARE/Borland/Delphi/xxx] 其中 xxx 是版本并导出整个 分支。
    • 打开文件并删除密钥 LMKEY、LMLIC。
    • 将 C:\Program Files\Borland\Delphi x\Projects\Bpl 文件夹复制到另一个位置
    • 复制 C:\Program Files\Borland\Delphi x\Imports 到另一个位置
    • 重新安装 Delphi,包括所有更新和 GExpert
    • 导入以前保存的注册表
    • 恢复 Bpl 和导入文件夹

    哇,Delphi 又回来了,提供所有第 3 方组件和 IDE 设置。唯一的限制是所有组件在重新安装 Delphi 之前和之后都必须位于同一文件夹中。

    这也会恢复 TeamSource 设置。如果您还要重新安装 Windows,请确保使 windows 用户与以前的用户名相同。

    【讨论】:

    • 我多年来一直在使用这个“黑客”。不管怎么说,还是要谢谢你。 +1,因为其他人可能会使用它。 PS:不要忘记 HKCU 密钥(同一位置:/SOFTWARE/Borland/Delphi/xxx)。我猜 LMKEY 是 HKLM 但什么是 LMLIC ?
    • LMKEY 和 LMLIC 是有关 Delphi 的许可信息,如果您也恢复它们,Delphi 会认为它没有许可或类似的东西。
    【解决方案3】:

    我的解决方案(有点脏,但它有效):

    我将所有 3rd 方 library.controls 放在一个包(超级包)中。我将所有控件放在一个包中。

    现在,当我将包迁移到另一台 PC 时,我所要做的就是复制/粘贴两个文件夹并设置两个路径。

    为我工作 - 其他人可能不同意,我不能责怪他们。我责怪 Borland/Embarcadero 的“地狱设计师”。如果您查看 StackOverflow,您会发现直到现在还没有人为此提供优雅的解决方案。

    【讨论】:

      猜你喜欢
      • 2016-12-25
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多