IFDEF für verschiedene Plattformen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

IFDEF für verschiedene Plattformen

Beitrag von Kay »

Hallo,

ich hätte eine Frage zur Verwendung von IFDEF zur Unterscheidung verschiedener Plattformen.
Ich habe eine Delphi-Unit, die ich nach Lazarus portiert habe. Unter Windows läuft das auch super.
Nun möchte ich das Projekt alleerdings auch unter Mac kompilieren. Die Unit enthält dazu folgende Fallunterscheidung:

Code: Alles auswählen

{$IFDEF MACOS}
...
{$ENDIF}
Das scheint aber nicht zu funktionieren. Wenn ich stattdessen jedoch Darwin angebe, funktioniert es einwandfrei. Ist das denn so korrekt? Wo liegen denn die Unterschiede?

Und dann finde ich in der Unit an einigen Stellen dieses Konstrukt:

Code: Alles auswählen

{$IF Defined(MSWINDOWS)}
...
{$ENDIF}
Ist das von der Logik her etwas anderes als $IFDEF oder sind das nur unterschiedliche Schreibweisen für die selbe Funktionalität?

Vielen Dank schonmal

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: IFDEF für verschiedene Plattformen

Beitrag von Socke »

Die Antworten findest du im Free Pascal Programmer's Guide (Kapitel 1 und Anhang G).

$IFDEF entspricht $IF DEFINED(), wobei letzteres die allgemeinere Variante ist, mit der noch mehr abgefragt werden kann.
Kay hat geschrieben:Das scheint aber nicht zu funktionieren. Wenn ich stattdessen jedoch Darwin angebe, funktioniert es einwandfrei. Ist das denn so korrekt? Wo liegen denn die Unterschiede?
Darwin ist die open source Version von Max OS; da der Free Pascal Compiler nicht zwischen Darwin und Mac OS unterscheidet, ist Darwin die beste Möglichkeit einen Mac von anderen BSD/Unixen zu unterschieden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2805
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: IFDEF für verschiedene Plattformen

Beitrag von m.fuchs »

Kay hat geschrieben:[...]Nun möchte ich das Projekt alleerdings auch unter Mac kompilieren. Die Unit enthält dazu folgende Fallunterscheidung:

Code: Alles auswählen

{$IFDEF MACOS}
...
{$ENDIF}
Das scheint aber nicht zu funktionieren. Wenn ich stattdessen jedoch Darwin angebe, funktioniert es einwandfrei. Ist das denn so korrekt? Wo liegen denn die Unterschiede?
Offensichtlich benutzt du MAC OSX, dafür gibt es DARWIN. MACOS hingegen ist für das ursprüngliche MAC Betriebssystem gedacht.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

Re: IFDEF für verschiedene Plattformen

Beitrag von Kay »

m.fuchs hat geschrieben:Offensichtlich benutzt du MAC OSX, dafür gibt es DARWIN. MACOS hingegen ist für das ursprüngliche MAC Betriebssystem gedacht.
Das ist korrekt, ich nutze Mavericks. Das heißt also, ich muss in der Unit alle Abfragen von MACOS auf DARWIN ändern? Kann ich davon ausgehen, dass der MACOS-Schalter damit veraltet ist und in Zukunft keine Verwendung mehr findet?

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2805
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: IFDEF für verschiedene Plattformen

Beitrag von m.fuchs »

Kay hat geschrieben:Das ist korrekt, ich nutze Mavericks. Das heißt also, ich muss in der Unit alle Abfragen von MACOS auf DARWIN ändern?
Genau, das erkennst du mit DARWIN.
Kay hat geschrieben:Kann ich davon ausgehen, dass der MACOS-Schalter damit veraltet ist und in Zukunft keine Verwendung mehr findet?
Nein, er findet Verwendung für MAC OS. Aber eben nicht für OSX.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten