如何在不生成 EXE 的情况下构建 Delphi 项目
How to build a Delphi project without generating EXE
我想知道是否有一种方法可以使用 dcc32 构建 .dpr,但跳过链接部分。我在一个非常大的项目上工作,该项目被分成子项目以进行模块化编译。问题是每个子工程在编译的时候都会生成一个EXE文件,这绝对是不必要的,而且这一步也增加了构建时间。
有什么想法吗?
如果子项目的存在仅仅是为了方便模块化编译(正如您在问题的评论中提到的那样),那么这种 "optimise" 构建的尝试至少部分是造成延迟的原因试图消除。
在 IDE 中构建时,编译器将只编译自上次编译以来发生变化的单元。您的子项目迫使编译器至少对涉及的单元进行两次评估。每个子项目一次,然后 "real" 项目再一次。
此外,编译器必须 link 并为每个子项目生成 EXE。您所说的 EXE 实际上并不需要作为项目构建的输出。
通过简单地消除冗余 "sub-projects",您将缩短构建时间。
如果子项目增加了一些其他价值,例如提供自动化测试覆盖率,那么这些项目的开销可能被认为是值得的,但这里似乎并非如此。
另一件需要记住的事情是,编译器根据每个单元本身是否发生了变化来决定是否重新编译一个单元。但是,如果条件指令或其他编译器设置已更改,则应重新编译 all 单元,否则不会应用更改的编译器设置的效果(如果这些设置本身会导致奇怪的行为和错误更改的设置应用于某些单位 - 更改的单位 - 而不是其他单位)。
在 IDE 下构建时,这要求您记住在更改编译器设置后执行完整构建。在专用构建过程中,通常建议 始终 在 "clean room" 环境中执行完整构建。那就是在每次构建之前或之后删除所有编译副产品(dcu 等)。
注意:对于这些冗余的子项目,您必须确保编译器设置在所有子项目和 "master" 项目中保持一致,这又给您自己带来了更多的工作和潜在的麻烦。
我想知道是否有一种方法可以使用 dcc32 构建 .dpr,但跳过链接部分。我在一个非常大的项目上工作,该项目被分成子项目以进行模块化编译。问题是每个子工程在编译的时候都会生成一个EXE文件,这绝对是不必要的,而且这一步也增加了构建时间。
有什么想法吗?
如果子项目的存在仅仅是为了方便模块化编译(正如您在问题的评论中提到的那样),那么这种 "optimise" 构建的尝试至少部分是造成延迟的原因试图消除。
在 IDE 中构建时,编译器将只编译自上次编译以来发生变化的单元。您的子项目迫使编译器至少对涉及的单元进行两次评估。每个子项目一次,然后 "real" 项目再一次。
此外,编译器必须 link 并为每个子项目生成 EXE。您所说的 EXE 实际上并不需要作为项目构建的输出。
通过简单地消除冗余 "sub-projects",您将缩短构建时间。
如果子项目增加了一些其他价值,例如提供自动化测试覆盖率,那么这些项目的开销可能被认为是值得的,但这里似乎并非如此。
另一件需要记住的事情是,编译器根据每个单元本身是否发生了变化来决定是否重新编译一个单元。但是,如果条件指令或其他编译器设置已更改,则应重新编译 all 单元,否则不会应用更改的编译器设置的效果(如果这些设置本身会导致奇怪的行为和错误更改的设置应用于某些单位 - 更改的单位 - 而不是其他单位)。
在 IDE 下构建时,这要求您记住在更改编译器设置后执行完整构建。在专用构建过程中,通常建议 始终 在 "clean room" 环境中执行完整构建。那就是在每次构建之前或之后删除所有编译副产品(dcu 等)。
注意:对于这些冗余的子项目,您必须确保编译器设置在所有子项目和 "master" 项目中保持一致,这又给您自己带来了更多的工作和潜在的麻烦。