【问题标题】:Why Delphi does not output the DCU files in the correct folder?为什么 Delphi 不输出正确文件夹中的 DCU 文件?
【发布时间】:2015-10-18 15:25:34
【问题描述】:

我有一个项目 (C:\Test\Test.dpr),它使用属于库 (MyLib.DPK) 的文件 (External.pas)。库中的所有文件都可以通过“搜索”路径访问,但我还直接在我的 DPR 文件中包含了 External.pas:

program Test;

uses
  External in '..\Packages\MyLib\External.pas',   <------ the 'external' file
  FormMain in 'FormMain.pas' {frmMain};

对于这个项目,我将“输出目录”和“输出 DCU 目录”设置为“.\$(Platform)_$(Config)”。

我编译的时候,这个项目所有DCU的exe文件都写在正确的输出文件夹:c:\Test\Win64_Debug\

但是,External.dcu 是在 ..\Packages\MyLib\External.dcu 中生成的
而不是 c:\Test\Win64_Debug\

这是为什么呢?


让我以不同的方式问这个问题:如果我在 DPR 项目中附加了一个位于不同文件夹中的 PAS 文件,那么所有 DCU 文件(包括外部文件)是否都应该在与EXE 文件?

【问题讨论】:

  • 是不是因为你使用了绝对路径?
  • 实际上,在我的项目中,我不使用绝对路径。我在这里显示绝对路径是为了简化示例。无论如何,我不明白为什么 Delphi 不接受绝对路径:)
  • 请出示真实代码如何
  • 到目前为止,我只为 Delphi32 编译,并让 Delphi 将 DCU 文件输出到与 PAS 文件相同的文件夹中。我工作了很多年。但现在我想编译为 64 位,所以我需要使用 $Platform $Config 'magic' 来分离 DCU。
  • DCU 文件放在 Unit Output Directory 中,而 EXE 放在 Output Directory 中。所以它们不一定在同一个文件夹中。

标签: delphi delphi-xe7 win64


【解决方案1】:

来自documentation

输出目录

指定编译器应该把可执行文件放在哪里。

单元输出目录

指定一个单独的目录来包含已编译的单元 (.dcu)。

听起来您需要指定单元输出目录以及输出目录。我个人倾向于将这两个目录分开。

【讨论】:

    【解决方案2】:

    是的,项目选项 UI 可能会非常混乱,尤其是因为要访问每个目标平台的设置,您需要通过下拉列表切换到该目标平台。

    如果您可以一次查看所有目标平台的配置,IDE 的这一部分会变得更好。

    现在,如果您希望能够在一个位置(所有配置)维护输出路径设置,您只需确保特定目标配置不会覆盖它。

    为此,请转到特定目标配置,然后单击其前面的 + 符号,而不是单击字段条目本身。

    这将扩展当前属性字段,并显示来自父配置的值,该属性可以从中继承。

    注意:虽然许多属性确实可以被继承(来自目标配置的属性值被添加到来自父方案的属性中,例如)Output directoryUnit output directory,因为它们只能包含一个值,因此被简单地覆盖。

    因此,为了确保在每个特定目标配置中使用来自 All configurations 的输出位置,它们都不应该为输出位置定义自定义值。

    换句话说,当您扩展特定属性时,来自Release configuration - ...Debug configuration - ... 的值必须为空,如上图所示。

    【讨论】:

    • 您也可以通过将以下内容添加到您的*.dproj 文件来执行相同操作:.\lib\$(Platform)\$(Config)\
    【解决方案3】:

    该死...我又做了一次...我为“所有配置 - 所有平台”设置了目标,但“调试配置 64 位 Windows 平台”的路径已经设置为其他内容。因此,当我在“所有配置”中设置(正确)路径时,“调试配置 64 位 Windows 平台”保持原样。我有 12 种可能的配置(调试、发布、预发布),所以我没有看到“调试配置 64 位 Windows 平台”仍然设置为原始值。项目选项的 GUI 可能会导致很多错误!

    谢谢大卫。很抱歉浪费您的时间。我仍在为 Delphi 路径苦苦挣扎。整个 IDE 中没有什么比路径(搜索、输出、库等)更令人困惑/奇怪了

    【讨论】:

    • 我想 IDE 正在尽力完成一项尴尬的工作,支持多个构建目标。你研究过选项集吗?我认为他们可能会帮助解决此类问题,但个人而言并没有走得太远。
    • 选项集对于这种情况并没有真正有用,我不认为。它们很有用,只是不在这里。通过支持继承,Delphi 在这方面比 VS 做得更好。是的,这很复杂。但是一旦你做对了,它就会非常强大和灵活。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 2021-11-12
    • 2011-05-09
    • 2016-07-11
    • 2018-09-29
    • 2010-09-14
    相关资源
    最近更新 更多