【问题标题】:Adding files to the DPR file vs project paths in Delphi 2010在 Delphi 2010 中将文件添加到 DPR 文件与项目路径
【发布时间】:2010-05-05 21:30:17
【问题描述】:

我们刚刚从 D7 迁移到 D2010,并且正在就清理项目路径进行辩论。我们有许多目录,其中包含大量 Pas 文件,这些文件包含在某些项目路径中,但任何单个项目实际使用的文件只有少数。

一种选择是完全消除项目路径,只在 dpr 中保留所有使用的文件。

第二个选项是在 dpr 中只保留所需的文件,并为其余文件提供指向目录的项目路径。

一个选项优于另一个选项有什么论据吗?

【问题讨论】:

    标签: delphi delphi-2010


    【解决方案1】:

    将所有单元明确地放在 dpr 中可以极大地缩短编译时间、代码完成、错误洞察和一般导航。
    它不会阻止您将文件组织在文件夹和子文件夹中,只是不要依赖不同的路径来查找它们。
    在具有数百万 LOC 的大型项目中,它会产生巨大的不同。

    【讨论】:

    • 但是将文件引用添加到 DPR 的限制在哪里?我的意思是你不添加像类和对话框这样的标准 VCL。第三方组件或自己的​​组件呢?我的项目很大,我仍然想要快速的 codeinsight。
    • 根据经验,我在 dpr 中添加了所有不属于 VCL/已安装的第 3 方组件的单元。那些带有图书馆路径。其他所有内容都被明确添加,因此您实际上不需要搜索路径。当然,YMMV,尤其是如果您将所有内容和其余部分组件化... :)
    • 你能给出一些关于编译时间效果的数字吗? “未优化”项目的最长编译时间是多少?
    • 我真的不记得我们拥有的“更糟糕”的数字,特别是因为我们试图避免陷入那种情况。我们的 3MLOC 应用程序通常在 ~1mn20 内编译。每当我们看到时间降级时,我们都会寻找 dpr 中缺少的添加(或隐式添加)单元。我相信我们有几次跃升至约 300 万次。
    • 这个 2012 年的答案谈到了当所有文件都在项目文件中声明而没有任何路径名 stackoverflow.com/a/12633151/80901(Delphi XE3 企业版)时,编译速度提高 10-15% 和其他优势
    【解决方案2】:

    我赞成将“库单元”与“项目单元”分开,并将所有“库单元”保留在搜索路径中,而所有“项目单元”都在项目文件中。原因如下:

    • 我们的业务线项目是大型的,几乎是百万行代码类型的项目,但除此之外,还有数百个用于各种微小事物的小型项目。在搜索路径中提供可用的“库单元”可以很容易地使用这些单元而不将它们添加到项目中:少一步加起来!
    • 使用搜索路径可以更轻松地移动 PAS 文件。这对我来说很重要,因为我正在重新组织我们的整个“构建环境”以更好地利用版本控制系统。
    • 当您更改其中一个共享单元并使其依赖于另一个共享单元时,您无需更新大量项目,它们就可以工作。
    • 我从不考虑将第三方组件(或 VCL 组件)添加到我的项目中,那么为什么要将我的“库单元”添加到项目中呢?我们需要在某个地方划清界限,因为如果我们将绝对所有文件添加到项目中,希望获得更快的编译时间,我们最终会得到无法管理的大型项目!
    • Delphi 自动将其 DPR 文件中的文件名更改为相对文件名。因此,您无法真正将项目从当前位置移动。现在尝试“分支”并在同一台机器上同时保持项目的两个副本(“发布”和“进行中的工作”)。 (这是我在为 GIT 准备构建环境,唯一的目的是能够分支)。

    作为参考,我的“库单元”是那些在不相关的项目中使用的单元(想想:组件和实用程序)。

    【讨论】:

      【解决方案3】:

      我赞成将项目使用的所有文件包含在项目本身中。这将通过确保使用的单元是项目的一部分来提高“洞察力”的性能。此外,这将使您能够更轻松地在项目管理器中管理您的代码。拥有大而复杂的路径是脆弱的,并且难以管理。

      【讨论】:

      • +1 用于指出路径管理问题。在为一个大型多项目构建进行配置管理后,该构建使用库路径来表示不是为每个项目专门创建的任何单元,我可以保证这可能导致的头痛。特别是当开发人员忘记使用相对路径时。我数不清有多少次“快速重建”持续到一个小时跟踪单元文件的位置并替换项目文件中的路径。
      【解决方案4】:

      关于加速 Insights 的 cmets 让我很感兴趣,我会尝试一下,但到目前为止,我从未在使用它们的项目中包含共享单元。相反,我为每个库创建了包并将它们添加到项目组中(主要是出于组织目的,即我从未真正将它们编译为运行时包)。我发现这比将所有文件都放在一个项目中更容易管理(尤其是在项目管理器中的所有最新改进),因为单个(包-)项目中的文件夹层次结构不会那么深,尤其是没有“.. "- 那样水平。

      【讨论】:

        【解决方案5】:

        项目中不包含所有文件的原因:

        • 打开/关闭项目的时间更少(表单和数据模块需要额外的时间)
        • 更快的文件重构(重命名/移动文件和目录不需要编辑所有项目)
        • 更容易找到作为核心要求的单元和应用程序逻辑的入口点位置 (uses MyInterfaces, MyTypes, MymMainUnit;)

        还有这个 QC 条目:

        报告编号:77687(RAID:273031)
        状态:在 .dpr 中打开编辑 源越来越慢,单位越多 该项目 http://qc.embarcadero.com/wc/qcmain.aspx?d=77687

        更新:现在我知道有很多方法可以打开项目文件 :) - 但我的意思是,在具有 500 个单位引用的 dpr 中,很难找到“重要”(或“主要”)单位,这是深入研究源代码的起点 - 如果代码是仅包含必要的单元引用的“轻量级”项目文件,则更容易研究代码。

        【讨论】:

        • 找到主机总是很容易:Alt-p-q 在德国德尔福。 :-)
        • @Ulrich:抱歉找不到(英文版),不过我猜这只是为了找到主窗体?
        • 在我的 D2007 中,它是项目菜单的第五项。应该在英文中称为“查看源代码”。它显示了 *.dpr。
        • @Ulrich 看我的编辑,它不一定是 VCL 应用程序 - uses 子句中的单元越少,越清晰
        • 英文 Delphi 中的 Alt-p-v 将带您进入 .dpr。
        猜你喜欢
        • 2015-02-01
        • 2010-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多