Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Projekt bezogene Compiler Direktive (https://www.delphipraxis.net/47018-projekt-bezogene-compiler-direktive.html)

Tau 5. Jun 2005 10:12


Projekt bezogene Compiler Direktive
 
Hallo Leute

habe eine kleine Frage. Kann ich Projekt bezogene Compiler Direktive setzen?

Wenn Ja wie in Gottesnamen, bin am verzweifeln. :wall: :wall: :wall:

nicht über das Menu sondern als Code. :gruebel:

schöne Grüsse
Tau

alcaeus 5. Jun 2005 10:15

Re: Projekt bezogene Compiler Direktive
 
Hallo Tau,

was genau meinst du mit projektbezogene Compilerdirektive? Meinst du dass diese Direktive im ganzen Projekt gueltig sind?
Ich arbeite in dem Fall mit einem include-File, welches saemtliche Kompilerkonstanten deklariert. Dieses include-File wird am Beginn jeder Unit mit {$INCLUDE ..} eingebunden, und fertig; wenn es das war was du meintest.

Greetz
alcaeus

Tau 5. Jun 2005 10:30

Re: Projekt bezogene Compiler Direktive
 
Hallo Alcaeus

ich habe einige Formulare die ich in verschiedenen Projekten einsetzen möchte. Das ich nicht
immer alles mitnehmen muss habe ich mir gedacht, das es mit Compiler Direktiven
für die einzelnen Projekte lösen könnte.

Ich kriege es einfach nicht auf die Reihe. :wall: :wall:

schöne Grüsse
Tau

GuenterS 5. Jun 2005 10:33

Re: Projekt bezogene Compiler Direktive
 
Würde es nicht reichen sie oben in die DPR Datei zu schreiben?

Tau 5. Jun 2005 10:42

Re: Projekt bezogene Compiler Direktive
 
Hallo GuenterS


ich denke schon aber WIE :?:


schöne Grüsse
Tau

GuenterS 5. Jun 2005 10:50

Re: Projekt bezogene Compiler Direktive
 
{$DEFINE xxx} ? oder hab ich jetzt was falsch verstanden?

alcaeus 5. Jun 2005 10:57

Re: Projekt bezogene Compiler Direktive
 
Falsch. Solche Konstanten werden nicht uebertragen:

In der dpr-Datei:
Delphi-Quellcode:
{$DEFINE FOO}
program SomeTest;
//...
In der Unit:
Delphi-Quellcode:
{$IFDEF FOO}
ShowMessage('Foo');
{$ENDIF}
Und siehe da: kein Punkt, keine Message bei der Ausfuehrung. Was lernen wir daraus? Konstanten fuer conditional compiles muessen in jeder Unit neu deklariert werden (ist irgendwie auch logisch). Abhilfe schafft ein include-File welches nur in der jeweiligen Unit eingebunden werden muss. Wie man das am Besten mit deinem Vorhaben verbinden kann, weiss ich jetzt auch nicht :-?

Greetz
alcaeus

Tau 5. Jun 2005 12:07

Re: Projekt bezogene Compiler Direktive
 
Hallo alcaeus

dein Ansatz habe ich auch schon ausprobiert. Es funktioniert nur dann wenn ich die Compiler Direktive
von hand eintrage im Menu / Projekt / Optionen / Verzeichnisse / Bedingungen unter Definition dann funktioniert es auch.

Bei einer Projekt Gruppe geht das aber leider nicht.

Es ist irrsinnig mühsam immer zwischen den Projekten hin
und her zu springen und zu Prüfen ob es Fehler gibt.


schöne Grüsse
Tau
:hi:

Tau 5. Jun 2005 21:23

Re: Projekt bezogene Compiler Direktive
 
Hallo zusammen

warum werden eigentlich diese Projekt Optionen
nicht irgend wo im Projekt gespeichert?

kann mir vielleicht jemand das erklären. :gruebel:

schöne Grüsse
Tau

Hansa 5. Jun 2005 21:49

Re: Projekt bezogene Compiler Direktive
 
Du gehst hin und machst ein (*$DEFINE Tau*) in irgendeiner Unit. Im Source hinschreiben !! Dann ist schon mal klar, daß das ein Tau-Programm werden soll. Tau will nämlich z.B. beim Programmstart, daß das Systemdatum abgefragt wird. Alle anderen wollen das nicht. Dann kann man mit Hilfe von (*$IFDEF Tau*) genau diese Version herstellen. Von der Hantiererei in der IDE halte ich sehr wenig. Für solche Fälle ist der Source besser geeignet !

Tau 5. Jun 2005 23:01

Re: Projekt bezogene Compiler Direktive
 
Hallo Hansa

was bedeuteten eigentlich (* *) diese Zeichen im Bezug auf die Compiler Direktive :gruebel:

ansonsten ist es genau das was alcaeus geschrieben hat.

Zitat:

In der dpr-Datei: Quellcode: markieren

Zitat:

{$DEFINE FOO}
program SomeTest;
//...


In der Unit: Quellcode: markieren
Zitat:

{$IFDEF FOO}
ShowMessage('Foo');
{$ENDIF}


schöne Grüsse
Tau

Hansa 5. Jun 2005 23:35

Re: Projekt bezogene Compiler Direktive
 
Alcaeus hat ja auch Recht. Ich wollte nur darauf hinweisen, daß so was normalerweise im Source geregelt wird und nicht in der IDE ! Und das Statement mit Projekt usw. kam danach. Du willst ja wohl nicht im Notfall dein Delphi extra installieren´und dann noch an den Projektoptionen rumfummeln. {} und (**) klammern Kommentare. Aber nur, sofern hinter (* oder { direkt kein $ kommt !!

Guck Dir doch mal ein Beispiel an, z.B. das hier (Teil der USES - Liste) :

Delphi-Quellcode:
{$IFDEF Delphi6}
  DesignIntf,
  DesignEditors,
{$ELSE}
  DsgnIntf,
{$ENDIF}
Das betrifft eine Frage, die auch hier schon des öfteren gestellt wurde. Aber egal. Das bedingte Symbol "Delphi6" wird in diesem Fall allerdings durch Delphi definiert. Es soll also ausgeschlossen werden, daß der verwendete Compiler Ärger macht. Es hindert Dich aber niemand dran dir selber solche Sachen mit (*$DEFINE blabla*) zu definieren und über (*$IFDEF blabla*) auszuwerten. Der Code bis zum (*$ENDIF*) wird nur dann ausgewertet werden, sofern vorher auch (*$DEFINE blabla*) steht ! Mehr ist das nicht. Man muß doch nur wissen, daß ein Compiler den Quelltext zeilenweise durchgeht und dementsprechend reagieren.

P.S.: ich benutze aus purer Faulheit lieber das (* anstatt {. Es dauert mir zu lange das AltGr und das { zu suchen. Einen * finde ich zur Not auch auf einer verstellten Tastatur oder einer ausländisch beschrifteten. Die geschweiften Klammern eher nicht. 8)

Tau 6. Jun 2005 00:23

Re: Projekt bezogene Compiler Direktive
 
Hallo Hansa

Danke für die Erklärung :thumb:

aber trotzdem hilft es mir bei meinem Problem nicht.


schöne Grüsse
Tau

Hansa 6. Jun 2005 00:49

Re: Projekt bezogene Compiler Direktive
 
Dann bin ich mit meinem Latein am Ende und muß das tun, was ich nicht gerne mache : Gucke in der Delphi-Hilfe. :mrgreen:

mschaefer 6. Jun 2005 07:30

Re: Projekt bezogene Compiler Direktive
 
Moin , noch Frühmoin,

das Problem war doch folgendes
Zitat:

ich habe einige Formulare die ich in verschiedenen Projekten einsetzen möchte...
also ich würde neben den speziellen Projektverzeichnissen ein allgemeines Projektverzeichnis anlegen.
In dieses lege ich die mehrfach zu nutzenden Formularunits und -dateien und binde diese einfach in mehrere
Projekte ein (mit Projekt hinzufügen). Oder war das jetzt zu einfach?
Compilerdirektiven im Quelltext sieht natürlich chic aus, aber die verbrauchen immer viel Kaffee....

Grüße // Martin


PS: Welche Units eingebunden werden ist in der dpr-Datei gespeichert und da könnte man sich auch mehrere anlegen...

jim_raynor 6. Jun 2005 10:21

Re: Projekt bezogene Compiler Direktive
 
Zitat:

Zitat von Tau
Hallo zusammen

warum werden eigentlich diese Projekt Optionen
nicht irgend wo im Projekt gespeichert?

kann mir vielleicht jemand das erklären. :gruebel:

schöne Grüsse
Tau

Eigentlich müssten die in der *.cfg des Projektes zu finden sein ;) Dort stehen auch die ganzen Kompiler-Direktiven drin.

Phoenix 6. Jun 2005 10:32

Re: Projekt bezogene Compiler Direktive
 
Also ich habe meistens eine einzelne Datei, die nur die Compilerdirektiven enthält - allerdings wirklich alle in der jeweilig korrekten Einstellung. Diese Datei wird dann in der .dpr einfach included. Hat den Vorteil, das ggf. von der IDE verstellte Direktiven mit meinem Include definitiv überschrieben werden.

Noch ein Vorteil: Ich habe eine inlude-Datei für Debug- und eine für Auslieferungs- Echsen. So kann ich per Batch-File die eine oder die andere Datei dorthin kopieren und habe meine gültige Konfiguration.

Tau 6. Jun 2005 11:59

Re: Projekt bezogene Compiler Direktive
 
Hallo Zusammen

Phoenix:
wie ist so eine include Datei aufgebaut.
Hast du vielleicht auch ein kleines Beispiel dafür, währe sehr nett.

jim_raynor:
ich weiß das in der *.cfg Datei die Daten drin sind aber
sie werden vom Compiler nicht herangezogen weis aber nicht warum?

gibt es irgendeinen Schalter den man umlegen muss?

schöne Grüsse
Tau


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 Uhr.

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-2025 by Thomas Breitkreuz