AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Anleitung zum Kommandozeilen Compiler (dcc32.exe)

Anleitung zum Kommandozeilen Compiler (dcc32.exe)

Ein Tutorial von MaBuSE · begonnen am 10. Sep 2004 · letzter Beitrag vom 6. Sep 2007
Antwort Antwort
Benutzerbild von MaBuSE
MaBuSE
Registriert seit: 23. Sep 2002
Es soll ja immer noch einige Leute geben, die noch nie den Kommandozeilen Compiler von Delphi benutzt haben

Hier ein paar Tipps (eine kleine Anleitung) zum Kommandozeilen Compiler von Delphi

1. Erstelle ein kleines Demoprojekt (Delphi starten -> neues Projekt -> einen TButton aufs Formular -> Close; zuweisen und speichern in c:\temp\test\)
2. Drücke F9 zum Starten in der IDE -> Programm wird kompiliert und gestartet
3. Programm und Delphi beenden
4. Shell öffnen (Dos Box / Eingabeaufforderung)
5. In Verzeichnis c:\temp\test wechseln
Code:
cd /d c:\Temp\Test
6. Den Kommandozeilen Compiler aufrufen
Code:
dcc32 Project1
7. Es wird die Datei Project1.dpr kompiliert und ein project1.exe erstellt.
Code:
C:\TEMP\Test>dcc32 Project1
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
Unit1.pas(32)
Project1.dpr(14)
48 lines, 0.36 seconds, 314324 bytes code, 7429 bytes data.
Ok, so weit so gut.

In Deinem Verzeichnis sollten folgende Dateien vorhanden sein:
Code:
C:\TEMP\Test>dir
 Volume in Laufwerk C: hat keine Bezeichnung.
 Volumeseriennummer: ACAF-C564

 Verzeichnis von C:\TEMP\Test

10.09.2004  14:15    <DIR>         .
10.09.2004  14:15    <DIR>         ..
10.09.2004  14:15               426 Project1.cfg
10.09.2004  14:15             2.912 Project1.dof
10.09.2004  14:12               188 Project1.dpr
10.09.2004  14:15           374.784 Project1.exe
10.09.2004  14:15               876 Project1.res
10.09.2004  14:15             3.651 Unit1.dcu
10.09.2004  14:11               495 Unit1.dfm
10.09.2004  14:12               465 Unit1.pas
               8 Datei(en)       383.797 Bytes
               2 Verzeichnis(se), 15.032.627.712 Bytes frei
Project1.dpr: der Projektquelltext (hier wird Unit1 mit Form1 aufgerufen)
Unit1.pas: der Quelltext des Hauptformulars Form1
Unit1.dfm: hier sind die visuell festgelegten Eigenschaften abgespeichert (alles was man im Objektinspektor sehen kann)

Wenn nur diese 3 Dateien vorhanden sind, kann man schon kompilieren!

Project1.res: Resourcendatei wird von der IDE automatisch erstellt. (Hier ist. z.B. das Icon der Exe enthalten)
Project1.dof: DOF = Delphi Option File -> hier speichert die Delphi IDE die Optionen ab
Project1.cfg: Hier werden die Optionen für den Compiler abgespeichert. Die IDE erzeugt diese Datei beim Kompilieren.

Die *.cfg Datei ist sehr nützlich!
Wenn zu einem Projekt eine cfg-Datei existiert, dann übernimmt DCC32.EXE automatisch die Optionen aus der Datei. (Mann kann also alle Einstellungen in der IDE vornehmen, und muss sie nicht als Parameter an DCC32 übergeben) Diese Datei ist eine Textdatei und kann editiert werden. z.B.
Code:
notepad Project1.cfg
Wenn keine *.cfg Datei vorhanden ist kann es passieren, das dcc32.exe folgende Fehlermeldung bringt:
Code:
C:\TEMP\Test>dcc32 Project1
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
Project1.dpr(1) Fatal: Unit not found: 'System.pas' or binary equivalents (DCU,DPU)
Dann muß man den Suchpfad manuell als Parameter übergeben:
Code:
C:\TEMP\Test>dcc32 -UC:\Programme\Borland\Delphi7\Lib project1
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
Unit1.pas(32)
Project1.dpr(14)
48 lines, 0.34 seconds, 314324 bytes code, 7429 bytes data.
oder in die *.cfg folgende Zeile einfügen:
Code:
-UC:\Programme\Borland\Delphi7\Lib
Unit1.dcu: Die kompilierte Unit (unit1.pas + unit1.dfm)
Project1.exe: Das kompilierte ausführbare Programm

Ruf mal dcc32 ohne Parameter auf, dann siehst Du eine Liste der möglichen Parameter:
Code:
C:\TEMP>dcc32
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation

Syntax: dcc32 [options] filename [options]

  -A<unit>=<alias> = Set unit alias -LU<package> = Use package
  -B = Build all units              -M = Make modified units
  -CC = Console target              -N<path> = DCU output directory
  -CG = GUI target                  -O<paths> = Object directories
  -D<syms> = Define conditionals    -P = look for 8.3 file names also
  -E<path> = EXE output directory   -Q = Quiet compile
  -F<offset> = Find error           -R<paths> = Resource directories
  -GD = Detailed map file           -U<paths> = Unit directories
  -GP = Map file with publics       -V = Debug information in EXE
  -GS = Map file with segments      -VR = Generate remote debug (RSM)
  -H = Output hint messages         -W = Output warning messages
  -I<paths> = Include directories   -Z = Output 'never build' DCPs
  -J = Generate .obj file           -$<dir> = Compiler directive
  -JP = Generate C++ .obj file      --help = Show this help screen
  -K<addr> = Set image base addr    --version = Show name and version
Compiler switches: -$<letter><state> (defaults are shown below)
  A8  Aligned record fields          P+  Open string params
  B-  Full boolean Evaluation        Q-  Integer overflow checking
  C+  Evaluate assertions at runtime R-  Range checking
  D+  Debug information              T-  Typed @ operator
  G+  Use imported data references   U-  Pentium(tm)-safe divide
  H+  Use long strings by default    V+  Strict var-strings
  I+  I/O checking                   W-  Generate stack frames
  J-  Writeable structured consts    X+  Extended syntax
  L+  Local debug symbols            Y+  Symbol reference info
  M-  Runtime type info              Z1  Minimum size of enum types
  O+  Optimization

C:\TEMP>
So ich hoffe ich habe Dir hiermit eine kleine Anleitung geben können.
Prinzipiell kann man mit dem dcc32 alles kompilieren, was auch die Delphi IDE kann.
Wenn Dein Project1.dpr eine DLL erstellt, dann wird dcc32 auch eine DLL erstellen.
DCC32.EXE kann auch mit Projektgruppen umgehen, und so viele Programme nacheinander kompilieren.
Dazu muß man wissen, das Projektgruppen eigentlich nur makefiles sind. Ein Aufruf von
Code:
make ProjectGroup1.bpg
ruft nacheinander für jedes enthaltene Projekt dcc32 auf und kompiliert es.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
 
Nicodius

 
Delphi 2006 Architect
 
#2
  Alt 9. Okt 2004, 20:02
nettes tutorial!!! ... also ganz ehrlich .... ich hab da nur ganz wenig gewusst
Nico Müller
  Mit Zitat antworten Zitat
Hansa

 
Delphi 8 Professional
 
#3
  Alt 9. Okt 2004, 20:28
OT:

Zitat von Nicodius:
... also ganz ehrlich .... ich hab da nur ganz wenig gewusst
Mußt du das dann noch so ausposaunen ?

@Mabuse : das fehlte noch in meiner Sammlung. Ausgedruckt und abgeheftet. Ich brauche zwar eigentlich nur /B und /M für Batch-Dateien, aber trotzdem : Top.
  Mit Zitat antworten Zitat
Nicodius

 
Delphi 2006 Architect
 
#4
  Alt 9. Okt 2004, 20:34
OT

Zitat von Hansa:
OT:

Zitat von Nicodius:
... also ganz ehrlich .... ich hab da nur ganz wenig gewusst
oops .. dachte gar nicht an die folgen


back to Topic: ich habs mir auch schon ausgedruckt VIELEN DANK!
Nico Müller
  Mit Zitat antworten Zitat
Hansa

 
Delphi 8 Professional
 
#5
  Alt 9. Okt 2004, 20:47
@Nicodius : sehe gerade, dein Satz ist sogar mit ausgedruckt aus dem PDF

Aber noch ein wichtiger Hinweis : die Kommandozeilenparameter werden durch eventuelle Quelltext-Compilerschalter übersteuert. Z.B. (*$H-*) Wenn ich nun "dcc32 /H+ TESTPROG" eingebe, so hat der Kommandozeilenparameter keine Auswirkung. Weiß man das nicht oder denkt nicht dran, so kann das böse Folgen haben.
  Mit Zitat antworten Zitat
Nicodius

 
Delphi 2006 Architect
 
#6
  Alt 9. Okt 2004, 20:49
hhahaaha cool .. hast mich in deiner pdf verewigt


...... "sorry" ...


was ich nicht verstehe.... wie arbeitet das ganze eigentlich? also wie erkennt der compiler ob es sich nun um commandozeilentext handelt?
Nico Müller
  Mit Zitat antworten Zitat
Hansa

 
Delphi 8 Professional
 
#7
  Alt 9. Okt 2004, 21:15
Die Reihenfolge ist :

1. Compilerschalter im Source. Alles andere ist zweitrangig

2. in der IDE : Einstellungen in Projektoptionen und bei DCC32 die Kommandozeilen-Parameter.

Letzteres ist übrigens auch böse Falle. Von den Häkchen in der IDE wird DCC32 wohl kaum was wissen. Oder doch ? Aber Mabuse hat doch alles geschrieben. Im Zweifellsfall muß man eben die CFG so anpassen, wie die Häkchen in der IDE, sofern man beides benutzen will und überhaupt Compilerschalter braucht.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

 
Delphi 10 Seattle Enterprise
 
#8
  Alt 11. Okt 2004, 10:20
Zitat von Hansa:
Die Reihenfolge ist :
1. Compilerschalter im Source. Alles andere ist zweitrangig
2. in der IDE : Einstellungen in Projektoptionen und bei DCC32 die Kommandozeilen-Parameter.

Letzteres ist übrigens auch böse Falle. Von den Häkchen in der IDE wird DCC32 wohl kaum was wissen. Oder doch ? Aber Mabuse hat doch alles geschrieben. Im Zweifellsfall muß man eben die CFG so anpassen, wie die Häkchen in der IDE, sofern man beides benutzen will und überhaupt Compilerschalter braucht.
Nein, MaBuSE hat nicht alles geschrieben

Es gibt noch ein paar Tücken mehr.

Es gibt mehrere Möglichkeiten dcc32.exe die Parameter zu übergeben.
  • direkt dcc32.exe /U...
  • im selben Verzeichnis wie Projekt1.dpr steht eine Project1.cfg in der alles definiert ist
  • im selben Verzeichnis wie Projekt1.dpr steht eine dcc32.cfg in der alles definiert ist
  • in dem Verzeichnis $(DELPHI)\bin (C:\Programme\Borland\DelphiX\bin) steht eine dcc32.cfg in der alles definiert ist
Die Tücke dabei ist, die Reiehfolge in der die Parameter übernommen werden. Es ist nicht so, das nur eine *.cfg verwendet wird, sondern DCC32.EXE sich aus jeder ein paar Parameter nimmt. Und die Reihenfolge ist auch nicht definiert.
(siehe Gewichtung und Reihenfolge der Parameter für DCC32.EXE

Zitat von Hansa:
Compilerschalter im Source. Alles andere ist zweitrangig
Stimmt im Prinzip.
Aber viele Compilerschalter sind nur für die Unit gültig, in der sie stehen.
Es ist also nicht so einfach möglich Schalter im Sourcecode für alle *.pas Dateien zu setzen.

Man könnte eine MyCompilerSwitches.inc schreiben in der dann alle Schalter stehen.
Diese würde dann in jede *.pas Datei mit {$I MyCompilerSwitches.inc} eingebunden.
Das wird oft genau so gemacht. (z.B. bei Komponentensammlungen wie JCL, JVCL, RxLib, ...)

Mit den Tasten [Strg+O] und danach nochmal [O] (Der Buchstabe O nicht Null!) fügt man im Delphi Editor alle Compilerschalter ein. Das ist auch eine Einfache Möglichkeit auf die schnelle festzustellen, wie die Settings sind ohne im Menü -> Projekt -> Optionen -> ...

[edit]
Die Schalter werdem im Editor bei Zeile 1 eingefügt. Also mit [Strg+Pos1] nach oben springen.
[/edit]

Einfach mal ausprobieren.
Viel Spaß
  Mit Zitat antworten Zitat
taktaky
 
#9
  Alt 6. Sep 2007, 19:15
hallo,

vielleicht kannst jemand mir mit diesem Tutorial mein Problemn in diesem Thema lösen :
http://www.delphipraxis.net/internal...=773507#773507


Gruß
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

 
Delphi 2009 Professional
 
#10
  Alt 6. Sep 2007, 19:28
Zitat von taktaky:
hallo,

vielleicht kannst jemand mir mit diesem Tutorial mein Problemn in diesem Thema lösen :
http://www.delphipraxis.net/internal...=773507#773507


Gruß
Meine Güte, so wenig Eigeninitiative zeigen grenzt ja schon richtig an Frechheit.

Das hier ist ein Tutorial, wie man die dcc32.exe benutzt. Du musst quasi nur abschreiben und Dein Zeugs einsetzen. So schwer kann das nicht sein.

Manuel
  Mit Zitat antworten Zitat
Themen-Optionen Tutorial durchsuchen
Tutorial durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz