AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Compiler Direktive: Wo muss definiert werden?
Thema durchsuchen
Ansicht
Themen-Optionen

Compiler Direktive: Wo muss definiert werden?

Ein Thema von Angel4585 · begonnen am 25. Aug 2008 · letzter Beitrag vom 26. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

Compiler Direktive: Wo muss definiert werden?

  Alt 25. Aug 2008, 11:47
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
{$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?

Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Compiler Direktive: Wo muss definiert werden?

  Alt 25. Aug 2008, 11:53
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
[...]
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Compiler Direktive: Wo muss definiert werden?

  Alt 25. Aug 2008, 12:04
Ich brauch diese Konstante aber nur in der Unit die alle Projekte verwenden
Also es ist definitiv nicht möglich in der DPR eine Definition zu machen und auf diese dann in einer anderen zuzugreifen?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Compiler Direktive: Wo muss definiert werden?

  Alt 25. Aug 2008, 12:07
Hi,

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

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: Compiler Direktive: Wo muss definiert werden?

  Alt 25. Aug 2008, 12:12
Es gibt CFG-Dateien. Für alle : DCC32.CFG oder übersteuern mir Programmname.CFG. Da macht man solche Direktiven rein.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#6

Re: Compiler Direktive: Wo muss definiert werden?

  Alt 25. Aug 2008, 12:14
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 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.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Compiler Direktive: Wo muss definiert werden?

  Alt 25. Aug 2008, 12:25
Zitat von turboPASCAL:
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
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Compiler Direktive: Wo muss definiert werden?

  Alt 25. Aug 2008, 12:48
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.

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?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Compiler Direktive: Wo muss definiert werden?

  Alt 26. Aug 2008, 07:44
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?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#10

Re: Compiler Direktive: Wo muss definiert werden?

  Alt 26. Aug 2008, 08:14
Du kannst Dich selbst so einstellen, daß Du immer neu erzeugst, statt nur compilierst

Sherlock
Oliver
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:37 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