AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi globale Compiler Directive, wie {$DEFINE TEST}

globale Compiler Directive, wie {$DEFINE TEST}

Ein Thema von delphin · begonnen am 24. Mär 2004 · letzter Beitrag vom 26. Mär 2004
Antwort Antwort
delphin

Registriert seit: 21. Aug 2003
Ort: Chemnitz
29 Beiträge
 
Delphi 7 Professional
 
#1

globale Compiler Directive, wie {$DEFINE TEST}

  Alt 24. Mär 2004, 09:46
Hallo,

habe ein kleines Problem mit dem Handling des Compilers.

Ich möchte in meinem Programmen, die - schon aus Gründen der Übersichtlichkeit - aus verschiedenen Units bestehen, Compilerdirectiven global zum Beispiel für Testzwecke der Art:

{$DEFINE TEST} für alle Units des Projects gültig, setzen !

Leider gelingt mir das stets nur für die Unit, in der die Directive steht.

Wie kann man das mit einer einzigen Anweisung für das gesamte Project gültig definieren ?

Gruß Gerd
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: globale Compiler Directive, wie {$DEFINE TEST}

  Alt 24. Mär 2004, 13:39
Leider geht das in Delphi nicht. Als Workaround könntest du aber eine Include-Datei erstellen, die du in jeder Unit einfügst (via $INCLUDE bzw. $I). Dort stehen dann die Compilerdirektiven drin.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
delphin

Registriert seit: 21. Aug 2003
Ort: Chemnitz
29 Beiträge
 
Delphi 7 Professional
 
#3

Re: globale Compiler Directive, wie {$DEFINE TEST}

  Alt 24. Mär 2004, 22:17
Hallo Chewie,

danke für Deinen Vorschlag, aber eigentlich kann ich nicht glauben, das es keine globalen Compilerschalter geben soll.

Welchen Sinn macht dann unter <Projekt>,<Optionen>,<Verzeichnise,Bedingungen> [Delphi7] der vorletzte Eintrag, gemäß Anhang
.
<Bedingungen>
Definition: ?

Noch 'ne Frage zu Deinem Vorschlag: Wie müßte die Include-Datei dann aufgebaubt sein, damit hieraus globale Compilerdirectiven der Art
{$DEFINE TEST} an die Unit übergeben werden kann ? Hast Du das schonmal probiert ?
Miniaturansicht angehängter Grafiken
compiler.jpg  
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#4

Re: globale Compiler Directive, wie {$DEFINE TEST}

  Alt 24. Mär 2004, 22:42
ins Feld Definition unter Bedingung muss lediglich "Test" (ohne ") eingetragen werden... {$DEFINE } braucht es dort nicht...
weitere Einträge können mit Komma getrennt angefügt werden....
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: globale Compiler Directive, wie {$DEFINE TEST}

  Alt 25. Mär 2004, 09:51
Ups, da hab ich mich wohl geirrt. Ich hab das nicht selbst ausprobiert, ich meinte aber, ich hätte das wo gelesen. Tschuldige nochmal.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#6

Re: globale Compiler Directive, wie {$DEFINE TEST}

  Alt 25. Mär 2004, 10:04
Zitat von delphin:
Welchen Sinn macht dann unter <Projekt>,<Optionen>,<Verzeichnise,Bedingungen> [...] <Bedingungen> Definition: ?
Dadurch werden Symbole auf der Kommandozeile beim Kompilieren übergeben (dcc32 -DFOO=BAR).
(also gibt es die Symbole dann im gesamten Projekt...)
  Mit Zitat antworten Zitat
delphin

Registriert seit: 21. Aug 2003
Ort: Chemnitz
29 Beiträge
 
Delphi 7 Professional
 
#7

Re: globale Compiler Directive, wie {$DEFINE TEST}

  Alt 26. Mär 2004, 16:40
Vorsicht Compiler-Fall,

jetzt habe ich's gelöst. Die Sache mit dem Eintrag im Project

Delphi-Quellcode:
 <Projekt>,<Optionen>,<Verzeichnise,Bedingungen> [...] <Bedingungen>
 Definition:
hat einen Hacken.

Ändert an oben beschriebener Stelle einfach den Compiler-Schalter oder löscht den Schalter ganz(alle Compiler-Optionen gelöscht), dann muss das ganz Projekt neu compiliert werden !

Einfach nur F9 bringt keine Änderung, da der (in diesem Fall zu intelligente) Compiler keine Änderung in den Units feststellt, compiliert er auch nicht neu, sondern Start nur das Projekt. Zwingender Weise mit den alt-compilierten Programmverzweigungen.

Habe zum Test 2 Unit der Art:

Unit 1:
Delphi-Quellcode:
{$ifDef TEST}  ShowMessage('Start Unit1: TEST-Schalter');
{$ELSE}        ShowMessage('Start Unit1: no Test'}
{$EndIf}
Unit 2:
Delphi-Quellcode:
{$ifDef TEST}  ShowMessage('Start Unit2: TEST-Schalter');
{$ELSE}        ShowMessage('Start Unit2: no Test'}
{$EndIf}
Ändert man nur den Compiler-Schalter im Project wird die zu letzt compilierte Programm-Version gestart !
Verändert man zusätzlich in einer Unit den Quelltext, wirken sich mit F9 die neu gesetzten Compiler-Option nur auf diese Unit aus.

Deswegen nach Compiler-Option-Änderung:
Alle Projekte compilieren
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#8

Re: globale Compiler Directive, wie {$DEFINE TEST}

  Alt 26. Mär 2004, 16:45
Zitat von delphin:
Ändert man nur den Compiler-Schalter im Project wird die zu letzt compilierte Programm-Version gestart !
Verändert man zusätzlich in einer Unit den Quelltext, wirken sich mit F9 die neu gesetzten Compiler-Option nur auf diese Unit aus.

Deswegen nach Compiler-Option-Änderung:
Alle Projekte compilieren
WAD (works as designed)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema 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 17:44 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