开发者

How to compile a Delphi 7 project group file (.bpg) using the command line?

I've grouped a lot of projects in a project group. All the info is in the project.bpg. Now I'd like to automatically build them all.

How do I buil开发者_JAVA百科d all the projects using the command line?

I'm still using Delphi 7.


I never tried it myself, but here is a German article describing that you can use make -f ProjectGroup.bpg because *.bpgs essentially are makefiles.


You can also run Delphi from the command line or a batch file, passing the .bpg file name as a parameter.

Edit: Example (for D2007, but can be adjusted for D7):

=== rebuild.cmd (excerpt) ===

@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


As I said as a comment to Ulrich Gerhardt answer, the make project_group.bpg is useless if your projects are in subdirectories. Make won't use relative paths and the projects won't compile correctly.

I've made a python script to compile all the DPRs in every subdirectory. This is what I really wanted to do, but I'll leave the above answer as marked. Although it didn't worked for me, It really answered my question.

Here is my script to compile_all.py . I believe it may help somebody:

# -*- 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)

Another vantage of this approach is that you don't need to add new projects to your bpg file. If it is in a subdir, it will compile.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜