Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Gewichtung / Reihenfole der Optionen für dcc32.exe (https://www.delphipraxis.net/28098-gewichtung-reihenfole-der-optionen-fuer-dcc32-exe.html)

MaBuSE 19. Aug 2004 16:35


Gewichtung / Reihenfole der Optionen für dcc32.exe
 
Hallo,

ich habe mal eine Frage zu Delphi 5 / 7

Der Kommandozeilencompiler (dcc32.exe) bezieht Optionen auf verschiedene Weise:

1. $(DELPHI)\bin\dcc32.cfg
2. LW:\Projektverzeichnis\dcc32.cfg
3. LW:\Projektverzeichnis\Projektname.cfg
4. Parameter die direkt an dcc32.exe übergeben werden

Meine Frage lautet: "In welcher Reihenfolge / Gewichtung werden die Optionen übernommen?"

Beispiel:
Es existieren 2 cfg Dateien (Fall 2 und Fall 3) die Option -N wird aus der dcc32.cfg Datei benutzt die Option -LN aber aus der Datei Projektname.cfg. :evil:

Gibt es da irgendwo eine Doku?

Im Internet ist nichts zu finden.

Diese Infos werden von uns benötigt, damit wir einen "sauberen" Build Prozess erstellen können.

Chewie 19. Aug 2004 16:41

Re: Gewichtung / Reihenfole der Optionen für dcc32.exe
 
Rein von der Logik her würd ich sagen: Von unten nach oben. Denn in allen Systemen, die ich kenne, haben speziell auf den Vorgang abgestimmte Parameter/Optionen Vorrang gegenüber allgmeinen Optionen. Alles andere wäre kontraproduktiv.

Edit: Ach so, ich glaub ich das etwas falsch verstanden. Ich dachte, du wüsstest, dass dad die Abfolge wär, nur die Richtung wär unklar.
OK, aber dennoch sollte es weitgehend zu lösen sein:
4. kommt wohl zuerst
dann 3., da es hier projektbzeogen ist, während die andere Datei wohl für alle Projekte in dem Ordner zuständig ist
dann 2.
dann 1.

MaBuSE 19. Aug 2004 17:05

Re: Gewichtung / Reihenfole der Optionen für dcc32.exe
 
Zitat:

Zitat von Chewie
Rein von der Logik her würd ich sagen: Von unten nach oben. Denn in allen Systemen, die ich kenne, haben speziell auf den Vorgang abgestimmte Parameter/Optionen Vorrang gegenüber allgmeinen Optionen. Alles andere wäre kontraproduktiv.

Die Reihenfolge sollte schon stimmen, aber dummerweise verhällt sich dcc32 anders !!!

Er mischt die Optionen !!! Einige werden in dem Beisp. oben aus dcc32.cfg genommen einige aus Projektname.cfg In allen steht was drinn.

Ich will wissen welcher Parameter in welcher Reihenfolge aufgelöst wird und warum !

Zitat:

Zitat von Chewie
...
4. kommt wohl zuerst
dann 3., da es hier projektbzeogen ist, während die andere Datei wohl für alle Projekte in dem Ordner zuständig ist
dann 2.
dann 1.

Leider nicht !!!

Parameter "-N" Reihenfolge: 1. 2. 3. 4.
Parameter "-LN" Reihenfolge: 1. 3. 2. 4.
(letzteres ist das stärkere / wirksame)

Die Anderen konnte ich nicht testen.

Der dcc32.exe verhällt sich leider auch nicht gleich der IDE (dcc70.dll)

Der dcc32.exe verhällt sich auch auf verschiedenen Laufwerken anders !!!
(Auf B: funktioniert -N und -LN nicht, aber -E und -LE gehen :-()

Da ist einfach kein System drin :!:

Chewie 19. Aug 2004 17:23

Re: Gewichtung / Reihenfole der Optionen für dcc32.exe
 
Hm, dann weiß ich auch nicht.
Aber ich denke mal, dass er durch alle Dateien durchgeht und auch Optionen in den "darunterliegenden Ebenen" berücksichtigt, solange die denen nicht widersprechen, die in einer späteren Ebene definiert werden.
Nach dieser Vorgehensweise würde er wahrscheinlich genau andersrum vorgehen: Zuerst benutzt er die Optionen, die in der Standard-Config-Datei bestimmt sind. Dann arbeitet er sich zu den anderen Config-Dateien vor und ändert seine Optionen entsprechend den Angaben in der Datei. Wenn also in der untersten Stufe der Schalter -L gesetzt ist und dieser weiter oben nicht wieder entfernt wird, dann ist dieser mglw. beim Compilieren noch geseztzt.

Wie gesagt: Alles nur Vermutungen.

MaBuSE 19. Aug 2004 17:26

Re: Gewichtung / Reihenfole der Optionen für dcc32.exe
 
Ich mach hier mal eine "offene Frage" draus :mrgreen:

MaBuSE 9. Sep 2004 10:42

Re: Gewichtung / Reihenfole der Optionen für dcc32.exe
 
Zitat:

Zitat von MaBuSE
Der dcc32.exe verhällt sich leider auch nicht gleich der IDE (dcc70.dll)

Der dcc32.exe verhällt sich auch auf verschiedenen Laufwerken anders !!!
(Auf B: funktioniert -N und -LN nicht, aber -E und -LE gehen :-()

Da ist einfach kein System drin :!:

Ich habe mal mit einem Borländer darüber gesprochen.
Das ist tatsächlich ein Bug.
Und wird warscheinlich in der Delphi 9 behoben sein. ;-)
Zitat:

I see those same results here and I see it when a driver letter different
from B: is specified for the virtual drive.
I have logged the issue as #204475.
Thanks the report.
Aber das mit der "gemischten" Reihenfolge der Parameter ist immer noch ein Rätsel.

MaBuSE 21. Mär 2005 09:33

Re: Gewichtung / Reihenfole der Optionen für dcc32.exe
 
Zitat:

Zitat von MaBuSE
Ich habe mal mit einem Borländer darüber gesprochen.
Das ist tatsächlich ein Bug.
Und wird warscheinlich in der Delphi 9 behoben sein. ;-)

Der Bug ist in Delphi 2005 leider immer noch vorhanden.
(Zumindest ist er nun Borland als Bug bekannt)

MaBuSE 11. Sep 2006 15:25

Re: Gewichtung / Reihenfole der Optionen für dcc32.exe
 
Zitat:

Zitat von MaBuSE
Zitat:

Zitat von MaBuSE
Ich habe mal mit einem Borländer darüber gesprochen.
Das ist tatsächlich ein Bug.
Und wird warscheinlich in der Delphi 9 behoben sein. ;-)

Der Bug ist in Delphi 2005 leider immer noch vorhanden.
(Zumindest ist er nun Borland als Bug bekannt)

Ach ja, ganz vergessen ;-)

Es gibt eine Lösung.
In Delphi 7 gibt es im dcc32 eine undokumentierten -N0 (null) Option, die genau das macht, was -N machen sollte.

Warum?
Es gibt eine -NB Option. Deshalb wird -NB:\dir nicht als -N interpretiert.
Die -N0 Option ist ein Synonym für -N (= gleiche Funktion) und war schon in Delphi 4 vorhanden.
Folgende undokumentierte -N schalter gibt es:
Zitat:

Hi,
please use -N0 switch instead of -N switch.

-Nb:\xxxx is parsed as -NB switch to specify BPI output directory.

Note that here is related -N* options:
-N0<path> = unit .dcu output directory
-NH<path> = unit .hpp output directory
-NO<path> = unit .obj output directory
-NB<path> = unit .bpi output directory
-NS<namespaces> = Namespace search path

Sorry, I don't know some of these options are public or not,
and when it has been implemented.
Ich werde mal bei Gelegenheit testen, ob das Problem mit der Gewichtung noch in Delphi 2006 besteht. ;-)

sakura 11. Sep 2006 15:28

Re: Gewichtung / Reihenfole der Optionen für dcc32.exe
 
Danke fürs Posten, die -Nx Parameter sind allesamt interessant :)

...:cat:...

mschaefer 11. Sep 2006 16:00

Re: Gewichtung / Reihenfole der Optionen für dcc32.exe
 
Moin, moin,

Habe für die Packageübrsetzung Batchdateien. Da ich als Verezichnis dcp/Bpl und DCU getrennt habe
um die Packagreihenfolge beim compilieren kontrollieren zu könnenn, müssen diese festgelegt werden.
Das mache ich trivial zunächst über die IDE, wo die Verzeichnisse in den Optionen eingetragen werden.
Beim Package-Erstellen werden die dof-Datei als Optionsdatei für die IDE und die cfg-Datei als Optionsdatei für den DCCC32 angelegt.

Fazit:
Bin der Meinung, das die cfg-im Projektverzeichnis
als erstes betrachtet wird, wenn diese vorhanden ist.


PS: Das mit den Nx-Optionen ist zwar interessant, aber sprengt schon bei einigermaßen verzweigten Verzeichnisstrukturen die Zeichengrenze der Kommandozeile. Würde mich daher auf die cfg-Datei konzentrieren.

Grüße // Martin

MaBuSE 1. Feb 2007 09:55

Re: Gewichtung / Reihenfole der Optionen für dcc32.exe
 
Zitat:

Zitat von MaBuSE
Warum?
Es gibt eine -NB Option. Deshalb wird -NB:\dir nicht als -N interpretiert.
Die -N0 Option ist ein Synonym für -N (= gleiche Funktion) und war schon in Delphi 4 vorhanden.
Folgende undokumentierte -N schalter gibt es:

Ach ja, in D2006 ist der -N0 und die Anderen -Nx endlich dokumentiert ;-)

Code:
Borland Delphi für Win32 Compiler-Version 18.0
2005 Borland Software Corporation

Syntax: dcc32 [optionen] dateiname [optionen]

  -A<unit>=<alias> = Unit-Alias setzen
  -B = Alle Units erzeugen
  -CC = Ziel: Konsole
  -CG = Ziel: GUI
  -D<syms> = Bedingungen definieren
  -E<path> = EXE/DLL-Ausgabeverzeichnis
  -F<offset> = Fehlersuche
  -GD = Detaillierte Map-Datei
  -GP = Map-Datei mit publics
  -GS = Map-Datei mit Segmenten
  -H = Ausgabe von Hinweismeldungen
  -I<paths> = Include-Verzeichnisse
  -J = .obj-Dateien generieren
  -JPHNE = C++ .obj-Datei, .hpp-Datei, im Namespace erzeugen, alles exportieren
  -K<addr> = Image-Basisadresse
  -LE<path> = Package .bpl-Ausgabeverzeichnis
  -LN<path> = Package .dcp-Ausgabeverzeichnis
  -LU<package> = Package verwenden
  -M = Modifizierte Units erzeugen
[b] -N0<path> = Unit .dcu-Ausgabeverzeichnis
  -NH<path> = Unit .hpp-Ausgabeverzeichnis
  -NO<path> = Unit .obj-Ausgabeverzeichnis
  -NB<path> = Unit .bpi-Ausgabeverzeichnis
  -NS<namespaces> = Namespace-Suchpfad[/b]
  -O<paths> = Objektverzeichnisse
  -P = Auch nach 8.3-Dateinamen suchen
  -Q = Ohne Meldung compilieren (Quiet)
  -R<paths> = Ressourcenverzeichnisse
  -U<paths> = Unit-Verzeichnisse
  -V = Debug-Information in EXE
  -VR = Externe Fehlersuche gen.
  -W[+|-][warn_id] = Ausgabe von Warnmeldungen
  -Z = Ausgabe nie zu erstellender DCPs
  -$<dir> = Compiler-Direktive
  --help = Diesen Hilfebildschirm anzeigen
  --version = Name und Version anzeigen
  --codepage:<cp> = Codierung für Quelltextdatei festlegen
  --default-namespace:<namespace> = Namespace setzen
  --depends = Unit-Abhängigkeitsinformationen ausgeben
  --doc = XML-Ausgabedokumentation
  --drc = Ausgaberessourcen-String .drc-Datei
  --no-config = Standard-DCC32.CFG-Datei nicht laden
Compiler-Schalter: $<buchst><status> (Vorgabewerte siehe unten)
  A8  Ausgerichtete Record-Felder
  B-  Vollst. boolesche Auswertung
  C+  Zur Laufzeit Bedingungen auswerten
  D+  Debug-Information
  G+  Importierte Datenreferenzen verw.
  H+  Standardmäßig lange Strings verw.
  I+  Ein-/Ausgabeprüfung
  J-  Strukt. Consts (Schreibzugriff)
  L+  Lokale Debug-Symbole
  M-  Laufzeit-Typinfo (RTTI)
  O+  Optimierung
  P+  Offene String-Parameter
  Q-  Integer-Überlaufprüfung
  R-  Bereichsüberprüfung
  T-  Typisierter @-Operator
  U-  Pentium(tm)-sichere Division
  V+  Strenge Prüfung von var-Strings
  W-  Stack-Frames erzeugen
  X+  Erweiterte Syntax
  Y+  Symbolinformation
  Z1  Mindestgröße für Enum-Typen

OldGrumpy 11. Sep 2008 10:56

Re: Gewichtung / Reihenfole der Optionen für dcc32.exe
 
Auch wenns schon älter ist - offene Frage ist offene Frage. Ich hab dazu in dem Artikel hier folgende Abfolge gefunden, wobei gesagt wird, dass es in Newsgroups dokumentiert sei (bei Gelegenheit mal bei google groups in den alten borland.* Gruppen suchen?)...

Zitat:

When Delphi performs a compilation from the command-line using dcc32.exe it gets more complicated.
  • The compiler options are first set to default values (you can see what these are by typing dcc32 with no arguments).
  • Then these settings are overridden by any settings in the file dcc32.cfg in the Delphi executable folder, if the file exists. Then these settings are overridden by any settings in the file dcc32.cfg in your project folder, if that file exists.
  • Then these settings are overridden by the settings in <Project Name>.cfg in your project folder, if that file exists (which it will if you have used the IDE to compile your project).
  • Then the settings are overridden by any command-line switches.
  • Finally, the compiler options can then be modified by directives within your source.


MaBuSE 11. Sep 2008 12:29

Re: Gewichtung / Reihenfole der Optionen für dcc32.exe
 
Zitat:

Zitat von OldGrumpy
Auch wenns schon älter ist - offene Frage ist offene Frage. Ich hab dazu in dem Artikel hier folgende Abfolge gefunden, wobei gesagt wird, dass es in Newsgroups dokumentiert sei (bei Gelegenheit mal bei google groups in den alten borland.* Gruppen suchen?)...

Die Frage ist immer noch offen, da ich immer noch keine "richtige" Antwort erhalten habe.
Was Du schreibst ist leider nicht ganz richtig, wie ich oben ja schon geschrieben habe.
Die Gewichtung der Parameter ist unterschiedlich.

Zitat:

When Delphi performs a compilation from the command-line using dcc32.exe it gets more complicated.
  • 0: The compiler options are first set to default values (you can see what these are by typing dcc32 with no arguments).
  • 1, 2: Then these settings are overridden by any settings in the file dcc32.cfg in the Delphi executable folder, if the file exists. Then these settings are overridden by any settings in the file dcc32.cfg in your project folder, if that file exists.
  • 3: Then these settings are overridden by the settings in <Project Name>.cfg in your project folder, if that file exists (which it will if you have used the IDE to compile your project).
  • 4: Then the settings are overridden by any command-line switches.
  • 5: Finally, the compiler options can then be modified by directives within your source.

Ich schrieb oben:
Zitat:

Zitat von MaBuSE
...
1. $(DELPHI)\bin\dcc32.cfg
2. LW:\Projektverzeichnis\dcc32.cfg
3. LW:\Projektverzeichnis\Projektname.cfg
4. Parameter die direkt an dcc32.exe übergeben werden
...

und einen Beitrag weiter unten:
Zitat:

Zitat von MaBuSE
Leider nicht !!!
Parameter "-N" Reihenfolge: 1. 2. 3. 4.
Parameter "-LN" Reihenfolge: 1. 3. 2. 4.
(letzteres ist das stärkere / wirksame)

Mach Dir eine dcc32.cfg, eine dcc32.cfg in dem Projektverzeichnis, eine Projekt.cfg und gib noch was in der Commandozeile an.
Du wirst feststellen, das für -N Deine Behauptung stimmt, aber für -LN eine andere Reihenfolge benutzt wird.

Wir haben das Problem gelöst indem wir die Dateien aus 1, 2 und 3 gelöscht haben und alle Parameter dem DCC32 als Komandozeile übergeben.
(wie es übrigens in D2007 via msbuild auch gemacht wird)

Ob das Problem bei der aktuellen Delphi Version noch besteht weiß ich nicht.

Ich werde die offene Frage als beantwortet markieren, obwohl sie nicht beantwortet ist, da sie für mich nicht mehr relevant ist ;-)
Es handelt sich um einen Bug in Delphi der auch von mir Borland gemeldet wurde.

Aber danke für die Antwort :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:04 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