Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Compiler Direktive: Wo muss definiert werden? (https://www.delphipraxis.net/119352-compiler-direktive-wo-muss-definiert-werden.html)

Angel4585 25. Aug 2008 11:47


Compiler Direktive: Wo muss definiert werden?
 
Hallo,

da ich noch nicht viel mit Compiler Direktiven gearbeitet habe hier mal eine Frage:

ich habe eine Unit die in verschiedenen Projekten verwendet wird.
In dieser Unit definiere ich eine Konstante, die jedoch je nach Projekt einen anderen Wert haben soll.
Also geh ich in der dpr jedes Projektes hin und mache eine
Delphi-Quellcode:
{$DEFINE PROJEKTNAME}
Bei der Deklaration der Konstante in der anderen Unit habe ich dann folgendes:
Delphi-Quellcode:
const
  {$IFDEF PROJEKT1}
  C_KONSTANTE = 'string1';
  {$ELSEIF PROJEKT2}
  C_KONSTANTE = 'string2';
  {$ELSEIF PROJEKT3}
  C_KONSTANTE = 'string3';
  {$ELSE}
  C_KONSTANTE = 'elsestring';
  {$IFEND}
Allerding hat die Variable in jedem der Projekte immer den elsestring bekommen.
Mache ich bei der Abfrage was falsch oder gelten diese Definitionen nur innerhalb einer Unit?

:angel:

Die Muhkuh 25. Aug 2008 11:53

Re: Compiler Direktive: Wo muss definiert werden?
 
Hallo Martin,

die Definitionen gelten nur innerhalb der Unit.

Du kannst diese allerdings auch in eine *.inc Datei auslagern und dann in jede Unit, in der das benötigt wird, einbinden:

switches.inc
Delphi-Quellcode:
const
  {$IFDEF PROJEKT1}
  C_KONSTANTE = 'string1';
  {$ELSEIF PROJEKT2}
  C_KONSTANTE = 'string2';
  {$ELSEIF PROJEKT3}
  C_KONSTANTE = 'string3';
  {$ELSE}
  C_KONSTANTE = 'elsestring';
  {$IFEND}


project1.pas

Delphi-Quellcode:
unit project1;

interface

uses [...]

{$DEFINE PROJEKT1}
{$I 'switches.inc'}

implementation
[...]



project2.pas

Delphi-Quellcode:
unit project1;

interface

uses [...]

{$DEFINE PROJEKT2}
{$I 'switches.inc'}

implementation
[...]

Angel4585 25. Aug 2008 12:04

Re: Compiler Direktive: Wo muss definiert werden?
 
Ich brauch diese Konstante aber nur in der Unit die alle Projekte verwenden :gruebel:
Also es ist definitiv nicht möglich in der DPR eine Definition zu machen und auf diese dann in einer anderen zuzugreifen?

Die Muhkuh 25. Aug 2008 12:07

Re: Compiler Direktive: Wo muss definiert werden?
 
Hi,

ich glaube man kann in den Projekteinstellungen noch was einstellen, das hatte bisher aber noch nicht genutzt.

Hansa 25. Aug 2008 12:12

Re: Compiler Direktive: Wo muss definiert werden?
 
Es gibt CFG-Dateien. Für alle : DCC32.CFG oder übersteuern mir Programmname.CFG. Da macht man solche Direktiven rein.

turboPASCAL 25. Aug 2008 12:14

Re: Compiler Direktive: Wo muss definiert werden?
 
Zitat:

Zitat von Die Muhkuh
Hi,

ich glaube man kann in den Projekteinstellungen noch was einstellen, das hatte bisher aber noch nicht genutzt.

Jupp, unter: -> Projekt -> Optionen -> Verzeichnisse/Bedingungen -> Definition
zB. für bedingten Compiler-Anweisungen, die gelten dan Global für alle eingebundene Units.


Zitat:

Zitat von Hansa
Es gibt CFG-Dateien. Für alle : DCC32.CFG oder übersteuern mir Programmname.CFG. Da macht man solche Direktiven rein.

Kann man, muss man aber nicht. Meine Version wird automatisch in die .cfg beim Speichern geschrieben. ;)

Angel4585 25. Aug 2008 12:25

Re: Compiler Direktive: Wo muss definiert werden?
 
Zitat:

Zitat von turboPASCAL
Zitat:

Zitat von Die Muhkuh
Hi,

ich glaube man kann in den Projekteinstellungen noch was einstellen, das hatte bisher aber noch nicht genutzt.

Jupp, unter: -> Projekt -> Optionen -> Verzeichnisse/Bedingungen -> Definition
zB. für bedingten Compiler-Anweisungen, die gelten dann Global für alle eingebundene Units.

Geil das klappt, danke euch :dp:

Angel4585 25. Aug 2008 12:48

Re: Compiler Direktive: Wo muss definiert werden?
 
AHHH klappt doch nicht, die Direktiven sind nicht richtig, so muss es heissen:

Delphi-Quellcode:
const
  {$IFDEF PROJEKT1}
  C_KONSTANTE = 'string1';
  {$ELSEIF DEFINED(PROJEKT2)}
  C_KONSTANTE = 'string2';
  {$ELSEIF DEFINED(PROJEKT3)}
  C_KONSTANTE = 'string3';
  {$ELSE}
  C_KONSTANTE = 'elsestring';
  {$IFEND}
sonst springt der Compiler immer direkt ins else. :gruebel:

Edit: Blöd ist jetz noch, das ich die Unit mit der Konstanten in jedem Projekt vorm kompilieren verändern muss damit diese neu erzeugt wird. Kann ich das irgendwie einstellen das die automatisch immer neu erzeugt wird?

Angel4585 26. Aug 2008 07:44

Re: Compiler Direktive: Wo muss definiert werden?
 
Zitat:

Zitat von Angel4585
Edit: Blöd ist jetz noch, das ich die Unit mit der Konstanten in jedem Projekt vorm kompilieren verändern muss damit diese neu erzeugt wird. Kann ich das irgendwie einstellen das die automatisch immer neu erzeugt wird?

:D

Sherlock 26. Aug 2008 08:14

Re: Compiler Direktive: Wo muss definiert werden?
 
Du kannst Dich selbst so einstellen, daß Du immer neu erzeugst, statt nur compilierst ;)

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:23 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz