为什么Delphi 2009 IDE生成的可执行文件与命令行生成的不同?

10
我正在使用MSBuild生成构建,并在命令行中设置dproj中的构建配置。令人不安的是,因此生成的可执行文件的大小与IDE构建产生的大小略有不同(虽然不多,但仍然存在!)有什么想法吗?我本以为会使用相同的编译器?
5个回答

10

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


8
要了解IDE正在做什么,请查看:
工具 | 选项 | 环境选项 | 编译和运行 | 显示命令行
您还可以检查编译器消息。

3

关于使用命令行进行构建一致性的第一个回答是正确的,如果您依赖于一个构建系统,在该系统中生产文件始终从控制台构建中获取,则可能无需担心此问题。

另一方面,如果您真的想弄清楚发生了什么,您应该打开映射文件(在完整详细级别上),并进行比较/差异。如果两者之间存在差异,则会在那里显示。任何其他可能存在的差异都可能是由于命令行选项不同(例如,在IDE设置中设置的条件标志)。


推荐使用地图文件(map file),这对于了解应用程序实际使用的内容仍然非常有效,尽管现在它们似乎已经不那么受关注了。 - skamradt

0

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

最终,我决定这不是一个大问题。两者都可以产生功能等效的可执行文件。


0

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

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


1
这怎么帮助提供实际支持呢? - Matthew Flaschen
它有助于确保您可以控制构建工具(Steve在他的问题中提到了MSBuild)以完全与从Delphi的IDE编译相同的方式进行编译。 - Olaf Monien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接