【问题标题】:How to compile a Delphi 7 project group file (.bpg) using the command line?如何使用命令行编译 Delphi 7 项目组文件 (.bpg)?
【发布时间】:2011-07-29 15:04:49
【问题描述】:

我在一个项目组中分组了很多项目。所有信息都在 project.bpg 中。现在我想自动构建它们。

如何使用命令行构建所有项目?

我仍在使用 Delphi 7。

【问题讨论】:

  • 我们使用脚本循环遍历 groupproj 的条目,并为遇到的每个项目启动命令行编译器。不要将此作为答案,因为我可用的脚本适用于 groupproj,而您正在使用 bpg。如果您有兴趣,我会尝试找到 bpg 版本。没有保证,因为我将不得不在 6 多年前的版本中挖掘工作。

标签: delphi build continuous-integration delphi-7


【解决方案1】:

我自己从未尝试过,但here 是一篇德语文章,描述您可以使用make -f ProjectGroup.bpg,因为*.bpgs 本质上是makefile。

【讨论】:

  • 这里是使用Delphi自带Make的命令:"c:\Arquivos de programas\Borland\Delphi7\Bin\make.exe" -B -fproject-group.bpg。不幸的是,它没有用,因为 make 不使用每个文件中的相对路径。我今天找到了这个帖子:rhinocerus.net/forum/lang-pascal-delphi-misc/…
  • 很抱歉。读到这样的东西让我很高兴我们在 D2007 上,所以我们可以使用 MSBuild。有了它,从命令行构建真的很容易。也许你可以升级到D2007?或者看看 FinalBuilder。它seems to be able to handle bpg's.
【解决方案2】:

您也可以从命令行或批处理文件运行 Delphi,将 .bpg 文件名作为参数传递。

编辑:示例(适用于 D2007,但可以针对 D7 进行调整):

===rebuild.cmd(摘录)===

@echo off
set DelphiPath=C:\Program Files\CodeGear\RAD Studio\5.0\bin
set DelphiExe=bds.exe
set LibPath=V:\Library
set LibBpg=Library.groupproj
set LibErr=Library.err
set RegSubkey=BDSClean

:buildlib
echo Rebuilding %LibBpg%...
if exist "%LibPath%\%LibErr%" del /q "%LibPath%\%LibErr%"
"%DelphiPath%\%DelphiExe%" -pDelphi -r%RegSubkey% -b "%LibPath%\%LibBpg%"
if %errorlevel% == 0 goto buildlibok

【讨论】:

  • 你能发一个例子吗?我在询问之前尝试过,但没有成功。
  • 对于 Delphi,您是指 IDE 吗?正如@neves 要求的那样,我无法将bpg 传递给命令行编译器......
  • 为此启动 IDE 真的是个好主意吗?命令行编译器 dcc32 肯定是你想要的。
  • @David:我认为这由用户决定;可能性就在那里。
  • 我应该指出指定备用注册表项的 -r 开关。这可以清除所有设计包(空的“Known Packages”子项),以防止在重建通常安装在 IDE 中的包时发生潜在冲突。它还可以使 IDE 快速启动。
【解决方案3】:

正如我在对 Ulrich Gerhardt 的回答中所说的那样,如果您的项目位于子目录中,那么 make project_group.bpg 将毫无用处。 Make 不会使用相对路径,项目将无法正确编译。

我制作了一个 python 脚本来编译每个子目录中的所有 DPR。这是我真正想做的事情,但我会将上面的答案保留为标记。虽然它对我不起作用,但它确实回答了我的问题。

这是我的 compile_all.py 脚本。我相信它可能会对某人有所帮助:

# -*- coding: utf-8 -*-

import os.path
import subprocess
import sys

#put this file in your root dir
BASE_PATH = os.path.dirname(os.path.realpath(__file__)) 
os.chdir(BASE_PATH)

os.environ['PATH'] += "C:\\Program Files\\Borland\\Delphi7\\Bin" #your delphi compiler path
DELPHI = "DCC32.exe"  
DELPHI_PARAMS = ['-B', '-Q', '-$D+', '-$L+']


for root, dirs, files in os.walk(BASE_PATH):
    projects = [project for project in files if project.lower().endswith('.dpr')]
    if ('FastMM' in root ): #put here projects you don't want to compile
        continue
    os.chdir(os.path.join(BASE_PATH, root))
    for project in projects:
        print
        print '*** Compiling:', os.path.join(root, project)
        result = subprocess.call([DELPHI] + DELPHI_PARAMS + [project])
        if result != 0:
            print 'Failed for', project, result
            sys.exit(result)

这种方法的另一个优点是您不需要将新项目添加到您的 bpg 文件中。如果它在子目录中,它将编译。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多