![]() |
Delphi 11.3 - Packages und {$IF
Für mein "kleines" Projekt auf
![]() 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? |
AW: Delphi 11.3 - Packages und {$IF
Zitat:
Delphi-Quellcode:
Grüße, Andreas
{$IFNdef CPUX86} AND {$IFNdef CPUX64}
|
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:
oder
{$IFnDEF xxx
Delphi-Quellcode:
,
{$IF not Defined(xxx)
wobei das IF den Vorteil von AND, OR und NOT hat. |
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 |
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
|
AW: Delphi 11.3 - Packages und {$IF
Die CompilerVersion von Delphi 11 ist 35.0 - 340 ist also noch eine Weile hin...
|
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) |
AW: Delphi 11.3 - Packages und {$IF
Zitat:
|
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... |
AW: Delphi 11.3 - Packages und {$IF
Zitat:
|
AW: Delphi 11.3 - Packages und {$IF
Ich werde versuchen ein Inc File zu erstellen, das alle Versionen (Delphi 2010 bis jetzt) abdeckt.
{$IFDEF VER280} {$LIBSUFFIX '280'} {$ENDIF} usw... Falls jemand da eine bessere Idee hat bin für alles offen :) |
AW: Delphi 11.3 - Packages und {$IF
Na ja, folgendes steht in der Hilfe zu
![]() Zitat:
Allerdings gibt's den Project Magician auch nur bis XE3 runter. |
AW: Delphi 11.3 - Packages und {$IF
Ich wollte eine Lösung, die bis Delphi2010 funktioniert - wir benutzen zur Zeit D2010 und delphi 11.3
und da die Lib auf Github ist, sollte das eventuell auch für andere Versionen funktionieren. Ich wollte eben nicht für jede Delphi Version ein eigenes DPK erstellen - wie es andere Anbieter ja machen - sondern nur eines. Ein dpk (ohne Version) funktioniert ja auch, solange nur eine Delphi Version am Rechner installiert ist. Bei unserer Transition von 2010 auf 11 sollten ja irgendwie beide Umgebungen noch funktionieren... Auf ![]() wird ja auch auf ein Beispiel mit einem Inc File verwiesen ( ![]() |
AW: Delphi 11.3 - Packages und {$IF
Es reicht doch für die Alten
und dann ein ELSE mit AUTO. Und mit IF statt IFDEF hast auch ein ELSE-IF
Delphi-Quellcode:
{$IF Defined(VER270)}
{$ELSEIF Defined(VER280)} {$ELSE} {$IFEND} |
AW: Delphi 11.3 - Packages und {$IF
Bei solchen Konstrukten muss man bei DPKs vorsichtig sein, dass die IDE einem das nicht wieder kaputt macht. Da sind DPKs noch empfindlicher als DPRs.
|
AW: Delphi 11.3 - Packages und {$IF
Zitat:
![]() |
AW: Delphi 11.3 - Packages und {$IF
Danke für den Hinweis!!!
Ich habs jetzt mit einem Inc File bewerkstelligt, das ab Ver340 {$Libsuffix AUTO} benutzt. Damit denke (hoffe) ich sollte es funktionieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:42 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