【问题标题】:Why is the executable produced by Delphi 2009 IDE different to that produced on the command line?为什么 Delphi 2009 IDE 生成的可执行文件与命令行生成的不同?
【发布时间】:2009-05-22 11:07:23
【问题描述】:

我正在使用 MSBuild 生成构建,并在命令行的 dproj 中设置构建配置。如此生成的可执行文件的大小与 IDE 构建生成的大小不同(差别不大,但仍然如此!),这有点令人不安。任何想法为什么?我会认为使用相同的编译器?

【问题讨论】:

    标签: delphi msbuild delphi-2009


    【解决方案1】:

    从 Delphi 命令行编译器构建的主要功能是标准化 - 您显式识别选项(在命令行、.cfg 文件等中),编译器遵循独家提供的选项。相比之下,IDE 有许多其他不明确和不明确的行为 - 例如,它可能会搜索项目选项中未指定的库路径。我的猜测是 IDE 构建中发生了一些您不完全了解的事情 - 这就是为什么从命令行完成标准化构建的原因。

    【讨论】:

      【解决方案2】:

      要查看 IDE 的功能,请查看

      工具 |选项 |环境选项 |编译运行 |显示命令行

      您可以检查编译器消息。

      【讨论】:

        【解决方案3】:

        关于使用命令行构建一致性的第一个答案是正确的,如果您依赖于生产文件始终来自控制台构建的构建系统,那么您可能无需担心。

        另一方面,如果您真的想弄清楚发生了什么,您应该打开地图文件(在完整的细节级别)并比较/比较它们。如果两者之间存在差异,它们将出现在那里。可能存在的任何其他差异都可能是由于命令行选项不同(例如可能在 IDE 设置中设置的条件标志)造成的。

        【讨论】:

        • +1 用于地图文件推荐。如今,它们的关注点似乎少了很多,但对于了解应用程序实际使用的内容仍然非常有效。
        【解决方案4】:

        这种行为在我使用过的每个版本的 Delphi 中都存在。 (5 - 2006 年)。我不会太担心它。当我第一次发现它时,我花了很多时间试图解决差异。我错过了编译器标志吗? IDE 和命令行编译器支持的选项之间是否存在差异?

        最后我认为这不是什么大问题。两者都始终生成功能等效的可执行文件。

        【讨论】:

          【解决方案5】:

          如果您向命令行编译器提供完全相同的参数,则生成的可执行文件几乎是相同的。

          事实上,IDE 只是调用命令行编译器。在 IDE 中编译您的项目并查看消息窗口。您将看到完整的 dcc32.exe 调用...

          【讨论】:

          • 不过,这如何帮助 OP 实际提供该服务?
          • 它有助于您确保 /could/ 控制您的构建工具(Steve 在他的问题中提到 MSBuild)以与您相同的方式编译完全从 Delphi 的 IDE 做。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-22
          • 2022-01-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多