如何在命令行上编译我的Delphi项目?

17

有没有人曾经成功使用命令行编译他们的Delphi 6和7项目(不是任何版本大于7的Delphi)?

我看到的所有说明都不太清楚需要将什么放在哪里!

我正在寻找逐步指南。

答案应该仅限于Delphi 6和7:我知道Delphi 2006及更高版本使用MSBuild,这要容易得多。

链接也会很受欢迎。

Gath

6个回答

15

这并不难做到。我在机器上安装了标准的 Delphi 5,并且当我打开命令提示符、导航到 $(DELPHI)\Demos\Threads 目录并输入 dcc32.exe thrddemo.dpr 时,应用程序就会在命令行上构建。

对于您自己的项目,您可能需要添加一些开关以包括文件目录、输出目录、定义或类似的内容。运行dcc32.exe而没有任何参数会给出一个开关和参数列表。文档中也有详细说明。

为了重复性,您应该创建一个批处理文件或一个常规的 Makefile。

请注意,项目cfg文件和Delphi目录中的公共dcc32.cfg都包含重要的设置。有关它们如何影响构建的一些信息,请参见例如Delphi Wikia上的此链接


3
谈到 Delphi 维基百科:也有一个关于这个主题的页面:http://delphi.wikia.com/wiki/Compile_from_Commandline,我刚刚进行了扩展。 - dummzeuch

9
对于构建自动化,我使用Apache Ant,它是用于自动化软件构建过程的软件工具。我将其用于所有项目,从Delphi 6到Delphi 2009和Free Pascal。
它可以“开箱即用”地执行MD5校验和生成ZIP文件、文本搜索/替换(用于版权头生成)、执行SQL语句、XSLT处理等任务。
例如,要编译所有Delphi 6项目,这是脚本的一部分:
<target name="compile_d6">
  <!-- Compile with Delphi 6 -->
  <apply executable="${d6}\Bin\dcc32" failonerror="true" output="build-d6.log" >
    <!-- rebuild quiet -->
    <arg value="-B"/>
    <arg value="-Q"/>
    <!-- file paths -->
    <arg value="-I${source};${indy10}/Lib/System"/>
    <arg value="-O${source};${indy10}/D6;${jcl}/d6"/>
    <arg value="-U${source};${indy10}/D6;${jcl}/d6"/>  
    <!-- all *.dpr files in current directory -->
    <fileset dir=".">
      <patternset><include name="*.dpr"/></patternset>
    </fileset>
  </apply>
</target>

免费开源的CI(持续集成)服务器,如Hudson/Jenkins,支持Apache Ant构建脚本,这意味着您可以让它们在您检入源代码库中的更改时自动构建项目。


1
看起来很不错...请再提供更多的解释。 - gath
我的答案包含了两个链接,一个是项目主页,另一个是维基百科文章。您有具体的问题吗? - mjn
1
是的,这是一个不错的选择。我曾经用NAnt做过类似的事情,它是Ant的.NET移植版。 - Conor Boyd

5
您可以使用此命令行构建所有内容:
"C:\Program Files\Borland\Delphi7\Bin\DCC32.exe" -Q -B your-project.dpr

把这行代码放在 .bat 文件中,这样你就不需要一遍又一遍地输入它了。查看运行该命令的命令行选项:
"C:\Program Files\Borland\Delphi7\Bin\DCC32.exe" -h

顺便提一下:-Q 是静默编译,而 -B 则会重新构建所有内容。如果您想要更快的编译速度,请不要使用 -B。

它将使用 your-project.cfg 文件中的所有选项。我发现这个 dof2cfg 可执行文件 非常有用。使用它后,我可以编辑 .dof 文本文件并将更改传播到命令行和 IDE 中。不需要为每个项目编辑它。

长路径的重要警告:Delphi 7 命令行编译器存在一个非常奇怪的 bug。如果路径非常长,则会出现无法理解的错误:访问冲突且没有任何有意义的信息。如果它没有合理的理由失败,请尝试减少最大路径大小和文件名大小。通常将项目放在根文件夹中可解决此问题。


2
我刚刚在CodeCentral上编写并上传了bdsproj2cfg,它可以对Delphi 2005和2006使用的.bdsproj文件执行相同的操作。以防万一有人需要... - dummzeuch

3

2
没有提供解决问题的实际指导(甚至没有链接到指导),这个回答听起来就像是产品推销。 - blerontin

1
我建议使用NAnt和dcc32的组合,但也有Juancarlo Añez的"WAnt - A Pascal-Friendly Build Tool"。我一直在使用修改过的1.x版本而不是2.x alpha版本。由于它是开源的,我可以扩展代码以输出与NAnt相同格式的XML日志,以便将其与CruiseControl.NET集成。

我正在使用CruiseControl.NET和NAnt。为什么要使用WAnt而不是NAnt? - mghie
当我刚开始使用WAnt时,它对于构建Delphi项目和运行DUnit测试的开箱即用支持似乎更加吸引我。就像我所说的,如果我从头开始,我会尝试NAnt。 - Eugene Yokota
@gath:即使是 Delphi 2,使用这个环境也不会有任何问题。 - mghie
是的,我有多台构建机运行CruiseControl.NET、NAnt和Delphi。效果很好。 @Gath:如果你真的尝试了这里的一些建议,并阅读了文档和发布的链接,你会很快意识到,正如mghie所重申的那样,所有这些建议都适用于任何Delphi版本。 - Conor Boyd

0

对于 Delphi 的后续版本,应该将其更改为:

"C:\Program Files (x86)\Embarcadero\RAD Studio\8.0\bin\DCC32.exe" -h


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