Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DCC32: Probleme mit Bedingungen (https://www.delphipraxis.net/134337-dcc32-probleme-mit-bedingungen.html)

Ares 20. Mai 2009 08:39


DCC32: Probleme mit Bedingungen
 
Hallo!

Ich möchte gerne ein Projekt mit dem Kommandozeilencompiler erstellen. In dem Projekt verwende ich verschiedene Compilerschalter für die bedingte Compilierung mit der ich verschiedene Versionen des Programms erstellen kann:

dcc32 -DVersion1;Bedingung2;Bedingung3 MeinProjekt

bzw.

dcc32 -DBedingung2;Bedingung3 MeinProjekt

Nun habe ich das Problem, dass aus irgendeinem Grund die Bedingung "Version 1" nicht reagiert. Das heißt egal ob ich diese Bedingung angebe oder nicht, dass Programm compiliert immer so, als ob diese Bedingung erfüllt ist.

Alle anderen Bedingungen arbeiten korrekt und mir ist schleierhaft wieso das nicht auch auf diese Bedingung zutrifft. Wenn ich in der IDE Arbeite stelle ich die Bedingungen in den Projektoptionen ein. Die Bedingungen sind also nirgendwo im Quelltext definiert, etc. Aber irgendwo her muss der Kommandozeilencompiler die Bedingung ja bekommen, sonst würde er das Programm ja anders compilieren? Aber wo kann ich danach suchen?

Besten Dank
Ares

gammatester 20. Mai 2009 10:20

Re: DCC32: Probleme mit Bedingungen
 
Wenn das Leerzeichen in "Version 1" kein Zufall ist, kann es nicht funktionieren. Denn beim dcc32-Aufruf ist keins vorhanden, dort steht Version1. Wenn im Sourcecode Version1 getestet wird, ist alles OK. Die IDE scheint mit Version 1 zurecht zukommen. Bei dcc32 -DVersion 1 wird versucht die Datei 1 mit Symbol Version zu compilieren. Mit "Version 1" kommt dcc32 offensichtlich nicht klar.

Im übrigen scheint es mir schlechter Stil zu sein, Bedingte-Symbol-Namen mit Leerzeichen zu vergeben; und mE sollte die IDE dies auch nicht erlauben.

Fazit: Verwende Version1 und alles sollte funktionieren.

Gammatester

jbg 20. Mai 2009 11:17

Re: DCC32: Probleme mit Bedingungen
 
Zitat:

Zitat von gammatester
Die IDE scheint mit Version 1 zurecht zukommen.

Nein, das tut sie nicht. Denn bei folgendem Code rennt das Programm in beide $IFDEF Blöcke rein:
Delphi-Quellcode:
{$IFDEF VERSION 1}
WriteLn('Version 1');
{$ENDIF}
{$IFDEF VERSION 2}
WriteLn('Version 2');
{$ENDIF}
Der einzige Unterschied zwischen der IDE und Ares' dcc32.exe Aufruf ist, dass die IDE die "Version 1" Bedingung in Anführungszeichen setzt.
Code:
dcc32 -D"Version 1";Foo;Bar project.dpr

himitsu 20. Mai 2009 11:26

Re: DCC32: Probleme mit Bedingungen
 
Leerzeichen sind halt in der Namenskonvention nicht vorgesehn

und ich weiß jetzt nicht, ob wowas eventuell geht
Delphi-Quellcode:
{$IFDEF 'VERSION 1'}

jbg 20. Mai 2009 11:28

Re: DCC32: Probleme mit Bedingungen
 
Zitat:

Zitat von himitsu
und ich weiß jetzt nicht, ob wowas eventuell geht
Delphi-Quellcode:
{$IFDEF 'VERSION 1'}

Wird mit
Code:
[Fehler] Unit1.pas(27): Fehlendes oder ungültiges Bedingungssymbol in der Anweisung '$IFDEF'
quittiert.

gammatester 20. Mai 2009 11:34

Re: DCC32: Probleme mit Bedingungen
 
Zitat:

Zitat von jbg
Zitat:

Zitat von gammatester
Die IDE scheint mit Version 1 zurecht zukommen.

Nein, das tut sie nicht. Denn bei folgendem Code rennt das Programm in beide $IFDEF Blöcke rein:

Deshalb habe ich scheint geschrieben :) Hab's allerdings nur mit Ares' Symbolen getestet. Deshalb noch 'ne Vermutung: IDE und DCC brechen das Parsen eines Symbolnamen im Quellcode beim ersten Leerzeichen ab.

himitsu 20. Mai 2009 11:53

Re: DCC32: Probleme mit Bedingungen
 
Zitat:

Zitat von gammatester
Deshalb noch 'ne Vermutung: IDE und DCC brechen das Parsen eines Symbolnamen im Quellcode beim ersten Leerzeichen ab.

ist auch so und beim {$ENDIF} wird alles nach dem ENDIF ignoeriert (PS: so kann man sich z.B. keine Kommentare da mit bauen)


Delphi-Quellcode:
// drum entspricht dieses hier

{$IFDEF BEDINGUNG kommentar}
  ...
{$ENDIF BEDINGUNG}

// jenem

{$IFDEF BEDINGUNG}
  ...
{$ENDIF}



// und das hier

{$IFDEF VERSION 1}

// wäre dann eben nur dieses

{$IFDEF VERSION}


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