AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Compiler Directive zur Laufzeit abfragen?
Thema durchsuchen
Ansicht
Themen-Optionen

Compiler Directive zur Laufzeit abfragen?

Ein Thema von moelski · begonnen am 14. Sep 2010 · letzter Beitrag vom 15. Sep 2010
Antwort Antwort
Seite 1 von 2  1 2      
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 15. Sep 2010, 05:49
Moin !

Um mal kurz zu erklären warum ich das brauche ...
Unsere Software kommt aus dem Hobbybereich (Modellbau). Nun wollen wir aber bald die Soft auch kostenpflichtig anbieten da es doch einige Nachfragen von Firmen gab.
Diese haben aber im Normalfall kein Interesse an den "Hobbyfunktionen".

Somit brauche ich eine Möglichkeit entweder die Funktionen in DLLs auszulagern - was ich so langsam verworfen habe - oder eben eine EXE zu erzeugen die den Ballast erst gar nicht beinhaltet.

Soweit dazu. Ich habe das jetzt mal mit den Directiven getestet. In einer Unit klappt es super. Oben habe ich {$Define HOBBY} und weiter beim Use wird die Unit je nach Switch erst gar nicht eingebunden:
{$ifdef HOBBY},Project_Item_XYZ{$endif}.
Dann noch die eigentliche Erstellung der Project Item Instanz umklammern mit {$ifdef HOBBY} CODE {$endif} und ich kann 2 EXEn erzeugen.

Was mir aber nicht gelingt ist ein "globaler" Switch. Ich würde gerne in meinem Projekt Source einen Schalter setzen können. Das mag er aber nun gar nicht.
Sind die Directiven immer Unitbezogen?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010

Geändert von moelski (15. Sep 2010 um 05:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.398 Beiträge
 
Delphi 12 Athens
 
#2

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 15. Sep 2010, 06:02
Diese Compiler-Direktiven gelten nur innerhalb einer Unit.
Global geht von innerhalb nicht, außer man gibt die über den Compiler rein (z.B. über die Projektoptionen des Inlinecompilers oder über einen entsprechenden Parameter des Komandozeilencompilers).

Eine alternative wäre noch eine Include-Datei, welche man überall einbindet.

PS: Bei der Variante mit dem Kompilerschalter über die Projektoptionen und den Parameter, muß man alles manuell komplett neu kompilieren, da der Compiler dieses nur in neu kompilierten Dateien aktualisiert.
Wurde eine Datei nicht verändert, dann "optimiert" Delphi dieses weg, da dann die Datei nicht automatisch neu kompiliert wird, da Delphi nicht automatisch auf "extern" geänderte Kompilerschalter reagiert.

PS: Über die Variante mit der Konstante und dem {$IF kann man auch über Uses-Grenzen gehen. (das nutze ich in meinem himXML, um zu prüfen ob die Units im selben Modus kompiliert wurden, wenn man die Comilerschalter umgestellt hat)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (15. Sep 2010 um 07:26 Uhr)
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 15. Sep 2010, 06:34
@himitsu :

Im Project Source klappt es nicht mit der Konstanten. Aber wenn ich das in eine Unit packe die ich eh überall eingebungen habe, dann klappts.

Die Exe wird ja nach Schalter 2Kb größer oder eben nicht Man muss natürlich komplett neu compilieren, aber das ist ja kein wirkliches Problem.

Vielen Dank für den Tip !!!
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.361 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 15. Sep 2010, 07:25
Hi,

du hast doch D2010. Da kann man doch wunderschön in der Projektverwaltung eine neue Build-Konfiguration anlegen.
Dort kannst du unter Bedingungen dein DEF eintragen.
Und wenn du noch ein anderes Ausgabe - Verzeichnis dafür definierst, liegen die EXE'n auch noch in einem betreffenden Verzeichnis.

Das finde ich IMHO viel einfacher und übersichtlicher.

Frank
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.398 Beiträge
 
Delphi 12 Athens
 
#5

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 15. Sep 2010, 07:35
Das finde ich IMHO viel einfacher und übersichtlicher.
Das nutze ich schon seit Jahren, nur daß ich da "früher" einfach mehrere Projektdateien genutzt habe.

Nur daß man eben nie vergessan darf unbedingt mit Shift+F9 die Anwendungen neu zu erzeugen, da diese Bedingung sonst (eventuell) nicht überall eingebunden wird und dann EXEn entstechen, welche mit "gemischen" Optionen kompiliert wurden (eine Unit so und 'ne Andere so).
Weißt du was das für Probleme beim Fehlersuchen macht, wenn man dieses Problem dabei vergißt?

Darum hatte ich mir zusätzlich noch die Konstanten als Gegenprobe integriert, welches beim Compilieren warnt, wenn etwas nicht stimmt, bzw. wenn dabei unterschiedliche Einstellungen erkannt wurden.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (15. Sep 2010 um 07:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.361 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 15. Sep 2010, 07:38
Nur daß man dann nie vergessan darf unbedingt mit Shift+F9 die Anwendungen neu zu erzeugen, da diese Bedingung sonst (eventuell) nicht überall eingebunden wird und dann EXEn entstechen, welche mit "gemischen" Optionen kompiliert wurden (eine Unit so und 'ne Andere so).

Darum hatte ich mir zusätzlich noch die Konstanten als Gegenprobe integriert, welches beim Compilieren warnt, wenn etwas nicht stimmt, bzw. wenn dabei unterschiedliche Einstellungen erkannt wurden.
Oder man definiert ein eigenes DCU - Ausgabeverzeichnis...

Frank
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.398 Beiträge
 
Delphi 12 Athens
 
#7

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 15. Sep 2010, 07:44
Oder man definiert ein eigenes DCU - Ausgabeverzeichnis...
OK, das wäre auch eine Möglichkeit.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#8

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 15. Sep 2010, 11:46
Zitat:
Dort kannst du unter Bedingungen dein DEF eintragen.
Und das ist dann das gleiche wie {$Define ... ?

Gilt das dann Projektweit?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010

Geändert von moelski (15. Sep 2010 um 11:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.398 Beiträge
 
Delphi 12 Athens
 
#9

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 15. Sep 2010, 11:56
Ja, also für alle Units, welche "neu" kompiliert werden.

Shift+F9 also nicht vergessen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

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

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 15. Sep 2010, 11:57
Die Build-Config gilt projektweit.

Beispiel z.B. bei einem Projekt von mir (siehe Anhang). Da sind vier Build-Configs drin:

- Debug: Exe mit Debug-Infos und erweiterte Fehlerbehandlung. Lokalzugriff auf DB
- Netzwerk: Siehe Debug, nur eben mit Netzwerkdatenbank
- Release: Erzeugt das Release-Programm mit netzwerkfähigem Client
- ReleaseEmbed: Erzeugt das Release-Programm mit ohne netzwerkfähigem Client
Angehängte Grafiken
Dateityp: jpg buildconfig.jpg (11,0 KB, 11x aufgerufen)
  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 03:32 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