Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 11.3 - Packages und {$IF (https://www.delphipraxis.net/212688-delphi-11-3-packages-und-%7B%24if.html)

rabatscher 15. Mär 2023 14:51

Delphi 11.3 - Packages und {$IF
 
Für mein "kleines" Projekt auf https://github.com/mikerabat/mrmath wollte ich mich mal um eine ARM kompatible Version kümmern.
Zu diesem Zweck wollte ich mal zumindest ein "Conditional Compile" einfügen, dass keine assembleroptimierten Versionen
der Funktionen einbindet.

Dazu wollte ich im Package file (mrmath.dpk) folgende Zeilen einfügen:


{$IF not defined(x86) and not defined(x64)}
{$DEFINE MRMATH_NOASM}
{$ifend}

und auch

{$IF CompilerVersion >= 340}
{$LIBSUFFIX AUTO}
{$IFEND}


und dann später im File, an der Stelle an der die Dateien eingefügt werden:
{$IFNDEF MRMATH_NOASM}
ASMMatrixAddSubOperations in '..\..\ASMMatrixAddSubOperations.pas',
ASMMatrixAddSubOperationsx64 in '..\..\ASMMatrixAddSubOperationsx64.pas',
ASMMatrixElementwiseMultOperations in '..\..\ASMMatrixElementwiseMultOperations.pas',
ASMMatrixElementwiseMultOperationsx64 in '..\..\ASMMatrixElementwiseMultOperationsx64.pas',
... (und noch ein dutzend anderer Dateien)
{$ENDIF}


Das Konstrukt wird in der IDE immer als "ausgegraut" dargestellt, beim Compilieren aber werden die
Datein importiert allerdings mit der Warnung, dass diese "implizit" eingefügt werden.

{$IF CompilerVersion >= 340}
{$LIBSUFFIX AUTO}
{$IFEND}
Das Konstrukt funtioniert überhaupt nicht - das IF kann vom Compiler nicht evaluiert werden und wird als Fehler ausgegeben.


Hat da wer ne Idee?

Andreas13 15. Mär 2023 15:08

AW: Delphi 11.3 - Packages und {$IF
 
Zitat:

{$IF not defined(x86) and not defined(x64)}
Meines Wissens müßte es heißen:

Delphi-Quellcode:
{$IFNdef CPUX86} AND {$IFNdef CPUX64}
Grüße, Andreas

himitsu 15. Mär 2023 15:17

AW: Delphi 11.3 - Packages und {$IF
 
Ja, x68/x64 gibt es nicht, dort die anderen Namen.

Ansonsten sollte es egal sein ob
Delphi-Quellcode:
{$IFnDEF xxx
oder
Delphi-Quellcode:
{$IF not Defined(xxx)
,
wobei das IF den Vorteil von AND, OR und NOT hat.

rabatscher 15. Mär 2023 15:29

AW: Delphi 11.3 - Packages und {$IF
 
Autsch... danke für den Hinweis... ich hatte diese Defines in den anderen Files definiert (auch mit FPC Kompatibilität im Hinterkopf...).


Weiß nur eventuell wer warum das
{$IF CompilerVersion >= 340}

einen Fehler verursacht?
dcc32 E2026: Konstantenausdruck erwartet

himitsu 15. Mär 2023 15:48

AW: Delphi 11.3 - Packages und {$IF
 
Hast du dafür auch eine eigene Konstante? (zusätzlich zu der in System.pas)

Hier kann man nur "echte" Konstanten benutzen, keine typisierten Konstanten (schreibgeschützte Variablen).



Und DEFINEs werden nicht über Unitgrenzen hinweg durchgereicht.
Das geht nur beim
Delphi-Quellcode:
{$INCLUDE
.

Uwe Raabe 15. Mär 2023 17:42

AW: Delphi 11.3 - Packages und {$IF
 
Die CompilerVersion von Delphi 11 ist 35.0 - 340 ist also noch eine Weile hin...

rabatscher 16. Mär 2023 10:18

AW: Delphi 11.3 - Packages und {$IF
 
Ja die Versio stimmt ned so richtig (habs eh auch mit 34.0 probiert...) aber...
es scheint dieses {$If Compilerversion....} darf nicht im dpk gemacht werden - es geht in den Units aber
nicht im dpk (warum eigentlich??)

In Delphi2010 hab ichs eh auch nicht zum Laufen gebracht also denk ich mal es war schon immer so...

Es wird also mit {$libsuffix auto} nichts werden ;) (inklusive der ganzen QC die das eh schon hat)

Uwe Raabe 16. Mär 2023 10:57

AW: Delphi 11.3 - Packages und {$IF
 
Zitat:

Zitat von rabatscher (Beitrag 1519935)
es scheint dieses {$If Compilerversion....} darf nicht im dpk gemacht werden - es geht in den Units aber
nicht im dpk (warum eigentlich??)

Weil die Konstante CompilerVersion in System.pas deklariert ist (wenn auch nicht explizit). Nun wird System bei einer Unit zwar unsichtbar immer in die Uses-Anwesiung eingebunden, aber eine DPK hat eben keine Uses-Anweisung und kann somit diese Konstante nicht sehen.

rabatscher 16. Mär 2023 11:22

AW: Delphi 11.3 - Packages und {$IF
 
Oh wow... das wusste ich nicht. Ich dachte das wäre was, was ja tatsächlich vom Compiler zur Verfügung gestellt wird,
ähnlich wie CPUX86

Aber gut, dann wird sich für mich ein automatisches Libsuffix nicht spielen...

Uwe Raabe 16. Mär 2023 13:55

AW: Delphi 11.3 - Packages und {$IF
 
Zitat:

Zitat von rabatscher (Beitrag 1519940)
Aber gut, dann wird sich für mich ein automatisches Libsuffix nicht spielen...

Und wie würde dann jetzt deine Alternative aussehen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:15 Uhr.
Seite 1 von 2  1 2      

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