Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Automatisch hinzugefügte Units mit IFDEF klammern? (https://www.delphipraxis.net/195278-automatisch-hinzugefuegte-units-mit-ifdef-klammern.html)

Ralf Kaiser 16. Feb 2018 06:39

Automatisch hinzugefügte Units mit IFDEF klammern?
 
Halli Hallo,

Bei uns haben wir oft die Situation, dass wir eine neue Version eines Komponenten-Sets installieren, der Code aber noch mit älteren Versionen kompilierbar bleiben soll. Die Stellen, an denen Unterschiede im Code durch die neue Version auftreten klammern wir dann mit z.B.
Delphi-Quellcode:
IFDEF VER_1_2_UP
aus. Das funktioniert natürlich nur wenn die INC-Datei mit den entsprechenden DEFINES in die Unit eingebunden wurde.

Jetzt hat Delphi ja die "Angewohnheit" Units die von den Komponenten benutzt werden automatisch in die USES-Liste aufzunehmen. So kommt es dann dazu, dass eine Unit die nur in der neuen Komponentenversion vorkommt in die USES-Liste eingefügt wird. Diese automatisch eingefügte Unit klammern wir dann ebenfalls mit dem IFDEF für die jeweilige Version.

In manchen Units bekommt Delphi es aber irgendwie nicht mit, dass dort solche eine neue Unit, geklammert durch IFDEF, schon in der Uses-Liste vorhanden ist und fügt sie einfach beim speichern noch einmal hinzu. Das führt natürlich hinterher zu einem Fehler beim Kompilieren. Im Moment muss dies dann mit einem externen Editor korrigiert werden bevor die Datei in die Versionsverwaltung wandert (sehr lästig).

Irgendwie habe ich noch kein Muster erkennen können, warum es in manchen Units klappt (neue Uses-Einträge werden nicht nochmal hinzugefügt) und in anderen Units nicht (dort werden sie nochmal hinzugefügt).

Hat jemand einen Tipp, worauf man achten sollte damit es in allen Unit auch mit per IFDEF geklammerten Units in der Uses-Liste klappt?

Coa,
Ralf

jaenicke 16. Feb 2018 07:04

AW: Automatisch hinzugefügte Units mit IFDEF klammern?
 
Zitat:

Zitat von Ralf Kaiser (Beitrag 1393984)
Im Moment muss dies dann mit einem externen Editor korrigiert werden bevor die Datei in die Versionsverwaltung wandert (sehr lästig).

Bei uns wandert keine Unit in das Repository bevor nicht jede Änderung manuell geprüft wurde (sprich per Doppelklick im Commitdialog durch die Dateien gehen und die Änderungen ggf. auch für einen anderen Commit zurückstellen). Ohne Überprüfung einzuchecken fände ich auch höchst fahrlässig.

Dabei korrigieren wir automatisch hinzugefügte Units, die gar nicht gebraucht werden, dann natürlich auch. Zum Beispiel wird manchmal System.Generics.Collections hinzugefügt.

Eine Lösung, die das unnötige oder falsche Hinzufügen unterbindet, haben wir bisher nicht gesehen. Ein Problem ist das für uns allerdings auch nicht wirklich, da wir die Änderungen ja ohnehin überprüfen.

Uwe Raabe 16. Feb 2018 07:53

AW: Automatisch hinzugefügte Units mit IFDEF klammern?
 
Du könntest die unerwünschte Unit ohne IFDEF in der uses-Anweisung belassen und eine gleichnamige, leere Unit im Projekt-Verzeichnis oder irgendwo in einem Verzeichnis des Suchpfads (die originalen Unit sollte dort ja eigentlich nicht zu finden sein) anlegen und mit in die Versionsverwaltung aufnehmen. Bei Umstellung auf die neue Version des Komponenten-Sets wird die Fake-Unit dann einfach entfernt.

Nicht nur die IDE kommt bei IFDEFs innerhalb der uses-Anweisung etwas aus dem Tritt.

Übrigens kommt das Problem vermutlich daher, daß in der IDE bereits die neue Version des Komponenten-Sets installiert ist.

Ralf Kaiser 16. Feb 2018 08:10

AW: Automatisch hinzugefügte Units mit IFDEF klammern?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1393991)
Übrigens kommt das Problem vermutlich daher, daß in der IDE bereits die neue Version des Komponenten-Sets installiert ist.

Ja, natürlich ist die neue Version installiert (sonst würde Delphi ja gar nicht "auf die Idee" kommen eine der neuen Units einzufügen.

Was ich ich verstehe, ist warum das IFDEF in der Uses-Liste in manchen Units genau das tut was es soll und in anderen nicht. Wobei das IFDEF sehr wohl erkannt wird, der Compiler beschwert sich ja hinterher, dass dort eine Unit doppelt drin ist...

Uwe Raabe 16. Feb 2018 08:29

AW: Automatisch hinzugefügte Units mit IFDEF klammern?
 
Zitat:

Zitat von Ralf Kaiser (Beitrag 1393992)
warum das IFDEF in der Uses-Liste in manchen Units genau das tut was es soll und in anderen nicht. Wobei das IFDEF sehr wohl erkannt wird, der Compiler beschwert sich ja hinterher, dass dort eine Unit doppelt drin ist...

Der Compiler schon, aber der uses-Parser der IDE ist da etwas schlichter gestrickt.

uligerhardt 16. Feb 2018 12:46

AW: Automatisch hinzugefügte Units mit IFDEF klammern?
 
Ich habe letzthin gelesen, dass man in solchen oder ähnlichen Fällen mit invertierter Logik ($IFNDEF und Unit im $ELSE-Zweig) weniger Probleme hat. Vielleicht hilft's bei dir ja auch.

Stevie 16. Feb 2018 15:50

AW: Automatisch hinzugefügte Units mit IFDEF klammern?
 
Zitat:

Zitat von uligerhardt (Beitrag 1394018)
Ich habe letzthin gelesen, dass man in solchen oder ähnlichen Fällen mit invertierter Logik ($IFNDEF und Unit im $ELSE-Zweig) weniger Probleme hat. Vielleicht hilft's bei dir ja auch.

Das hatte ich auch mal bemerkt.

uligerhardt 16. Feb 2018 15:57

AW: Automatisch hinzugefügte Units mit IFDEF klammern?
 
Zitat:

Zitat von Stevie (Beitrag 1394033)

Das habe ich gemeint. :mrgreen:

Ralf Kaiser 16. Feb 2018 16:29

AW: Automatisch hinzugefügte Units mit IFDEF klammern?
 
Zitat:

Zitat von uligerhardt (Beitrag 1394018)
Ich habe letzthin gelesen, dass man in solchen oder ähnlichen Fällen mit invertierter Logik ($IFNDEF und Unit im $ELSE-Zweig) weniger Probleme hat. Vielleicht hilft's bei dir ja auch.

OK. Danke für den Hinweis. Werde ich am Montag mal ausprobieren.


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