Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Erklärung zu Compilerschalter (https://www.delphipraxis.net/91465-erklaerung-zu-compilerschalter.html)

RWarnecke 5. Mai 2007 10:16


Erklärung zu Compilerschalter
 
Hallo zusammen,

ich habe jetzt schon mehrmals verschiedene Compilerschalter gesehen wie hier zum Beispiel :
Code:
{$DEFINE DEBUG}      // ---> Aktiviert den Debug Modus mit Ereigniss

{$B-}  // Complete Boolean Evaluation
{$T-}  // Typed @ operator
{$X+}  // Extended syntax
{$P+}  // Open string params
{$J+}  // Writeable structured consts
{$H+}  // Use long strings by default
{$O+}  // Optimization
{$R-}  // Range-Checking
{$V-}  // Var-String Checking

{$IFDEF DEBUG}
  {$D+}  // Debug information
  {$L+}  // Local symbol information
  {$YD+}
  {$C+} // Asserts
  {$WARNINGS ON}
  {$HINTS ON}
{$ELSE}
  {$D-}  // Debug information
  {$L-}  // Local symbol information
  {$YD-}
  {$C-} // Asserts
  {$WARNINGS OFF}
  {$HINTS OFF}
{$ENDIF}

{$IFDEF VER180}             //Delphi 2006
  {$DEFINE DELPHI6}
  {$DEFINE DELPHI7}
  {$DEFINE DELPHI8}
  {$DEFINE DELPHI2005}
  {$DEFINE DELPHI2006}
{$ENDIF}

{$IFDEF VER170}             //Delphi 2005
  {$DEFINE DELPHI6}
  {$DEFINE DELPHI7}
  {$DEFINE DELPHI8}
  {$DEFINE DELPHI2005}
{$ENDIF}

{$IFDEF VER160}             //Delphi 8
  {$DEFINE DELPHI6}
  {$DEFINE DELPHI7}
  {$DEFINE DELPHI8}
{$ENDIF}

{$IFDEF VER150}             //Delphi 7
  {$DEFINE DELPHI6}
  {$DEFINE DELPHI7}
{$ENDIF}

{$IFDEF VER140}             //Delphi 7
  {$DEFINE DELPHI6}
{$ENDIF}

{$IFDEF DELPHI6}
  {$WARN UNIT_LIBRARY OFF}
  {$WARN UNIT_PLATFORM OFF}
  {$WARN SYMBOL_DEPRECATED OFF}
{$ENDIF}
Gibt es irgendwo eine Erklärung dieser Schalter ? Einen dieser Schalter {$WARN UNIT_PLATFORM OFF} kenne ich ja schon. Was kann ich mit diesen Schaltern erreichen ?

3_of_8 5. Mai 2007 10:38

Re: Erklärung zu Compilerschalter
 
Schau in der Hilfe nach. Das sind übrigens nicht alles Schalter, das sind auch andere Direktiven, z.B. IFDEF, mit dem man eine bedingte Kompilierung erreichen kann.

Delphi-Quellcode:
  {$IFDEF Win32}
    LB: String=#13#10;
    LOGFILE='./log.txt';
  {$ELSE}{$IFDEF MACOS}
    LB: String=#13;
    LOGFILE='./log';
  {$ELSE}
    LB: String=#10;
    LOGFILE='./log';
  {$ENDIF}
  {$ENDIF}
Das ist z.B. eine Anwendungsmöglichkeit. Ich überprüfe, unter welchem Betriebssystem kompiliert wird.

Wenn es unter Windows kompiliert wird, wird LB (Line Break, also Zeilenumbruch) auf #13#10 gesetzt, wie es unter Windows normal ist. Der Dateiname des Logs ist log.txt. Unter Mac wird LB auf #13 gesetzt und der Logdateiname ist log. Ansonsten nehme ich ein unixoides System an und setze LB auf #10 und den Logdateinamen wieder auf log.


Mit den Schaltern kannst du vor allem den Compiler und den Linker beeinflussen, die Standardeinstellung ist hierbei meistens das beste. Beim Debuggen kann es aber manchmal ganz nützlich sein, die Optimierung mit {$O-} auszuschalten.

RWarnecke 5. Mai 2007 11:26

Re: Erklärung zu Compilerschalter
 
Wann setze ich solche Schalter ? Wenn ich Komponenten erstelle oder wenn ich auch ganz normale Programme schreibe ?

Christian Seehase 5. Mai 2007 11:48

Re: Erklärung zu Compilerschalter
 
Moin Rolf,

Zitat:

Zitat von RWarnecke
Wann setze ich solche Schalter ?

das klingt jetzt vielleicht ein wenig blöd, aber:
Du musst sie da setzten, wo Du sie jeweils brauchst, unabhängig davon, ob es sich um eine Komponente oder ein vollständiges Programm handelt.

Ich hatte das, beispielsweise, bei einer Klasse, die die Indys dynamisch einbindet.
Da ich unter D7 Indy 9 installiert habe, und unter D2006 Indy 10, musste ich ein paar Stellen in Abhängigkeit des verwendeten Compilers compilieren, da Indy 10 nicht vollständig abwärtskompatibel zu Indy 9 ist.

Ein Beispiel bei dem intensiv von bedingter Compilierung gebrauch gemacht wird ist FastMM (http://sourceforge.net/projects/fastmm/).
Lade Dir das mal runter, und schau Dir die FastMM4Options.inc an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 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