Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Packages: Was genau macht {$IMPLICITBUILD ON/OFF} (https://www.delphipraxis.net/158662-packages-genau-macht-%7B%24implicitbuild-off%7D.html)

s.h.a.r.k 25. Feb 2011 15:31


Packages: Was genau macht {$IMPLICITBUILD ON/OFF}
 
Hallo zusammen,

ich bin gerade mal wieder dabei eines meiner Packages zu fixen (Problem siehe hier) und bin dabei über die Direktive IMPLICITBUILD gestolpert -- hier noch ein Link zur Doku. Ich verstehe nur immer noch nicht genau zu was dieses Direktive da ist. Wenn ich ein Package compiliere, erzeuge und (das DesignTime-Package) installiere, dann sollte sich, meinem Verständis nach, nichts mehr daran ändern. Was genau bedeutet dann aber das hier:
Zitat:

[...] prevents the source file in which it occurs from being implicitly recompiled later.
Hat ein anderen Package mein Package unter "require", wird meines bei {$IMPLICITBUILD ON} dann nochmals compiliert?

Wäre echt sehr froh, wenn hier jemand Licht ins Dunkel bringen kann. Denn etwas verwenden, ohne zu verstehen, wie es funktioniert, gefällt mir nicht so recht. Danke!

s.h.a.r.k 25. Feb 2011 16:10

AW: Packages: Was genau macht {$IMPLICITBUILD ON/OFF}
 
So, hatte mir Uwe Raabe eine kleine private Unterhaltung. Hier ein paar interessante Dinge dies bzgl.:

Zitat:

Zitat von Uwe Raabe
IMPLICITBUILD ON bedeutet, daß beim Compilieren deines Packages auch die required-Packages compiliert werden, wenn dies nötig ist. Manchmal hat der Compiler aber Probleme dies zu tun - die Gründe dafür sind noch unklar. (Es gibt irgendwelche QCs, die ich jetzt nicht parat habe)

Schaltest du die Option aus, wird immer nur das aktuelle [aktive] Package neu compiliert. Wenn du die Packages in der richtigen Reihenfolge in einer Projektgruppe hast, kannst du bequem über "alle erzeugen" die Packages auch so neu compilieren.

Zitat:

Zitat von Uwe Raabe
Zitat:

Zitat von s.h.a.r.k
Weißt du eigentlich wann genau die required-Packages neu compiliert werden müssen? Ich sehe so direkt keinen Grund, warum Delphi das nochmals tun müsste.

Wenn du was am der Units im Package Source geändert hast?

Nimm an, du hast ein Runtime- und ein Designtime-Package in einer Projektgruppe und das Designtime-Package ist aktiv. Du änderst nun eine Unit des Runtime-Package. Dückst du jetzt auf Compilieren wird bei IMPLICITBUILD OFF nur das Designtime-Package neu compiliert, bei IMPLICITBUILD ON erst das Runtime-Package und dann das Designtime-Package.

Anderes Beispiel: Du hast eine ganze Reihe von Packages, die aufeinander aufbauen in einer Projektgruppe. Startest du jetzt "alle erzeugen", wird bei IMPLICITBUILD OFF erst das erste Package neu erzeugt, dann das zweite usw. Bei IMPLICITBUILD ON gibt es aber das folgende Muster: (1), (1, 2), (1, 2, 3), (1, 2, 3, 4), usw.


DSCHUCH 25. Feb 2011 21:37

AW: Packages: Was genau macht {$IMPLICITBUILD ON/OFF}
 
das nette mit implicit build on ist, das dir ständig die ide abstürzt, da diese die packages dann x mal neu laden muß.

ich sage nur : (1), (1, 2), (1, 2, 3), (1, 2, 3, 4) ... also x^y -- sozusagen.

ich arbeite prinzipiell mit implicit build off, du mußt dann aber aufpassen, das du die units und verzeichnisse richtig hast, da sonst ein versionskonflikt autreten kann ala "package xy ist veraltet" oder unit yx blablabla

ich denke du kennst die fehlermeldung. ^^

Uwe Raabe 26. Feb 2011 09:11

AW: Packages: Was genau macht {$IMPLICITBUILD ON/OFF}
 
Zitat:

Zitat von DSCHUCH (Beitrag 1084459)
ich sage nur : (1), (1, 2), (1, 2, 3), (1, 2, 3, 4) ... also x^y -- sozusagen.

Exakt: n*(n+1)/2 (n = Anzahl der Packages)

s.h.a.r.k 26. Feb 2011 12:40

AW: Packages: Was genau macht {$IMPLICITBUILD ON/OFF}
 
Ob ich das nun so präzise wissen wollte, weiß ich nicht :mrgreen: Aber herzlichen Dank für die Antworten schon mal.

Insgesamt finde ich bisher, dass man mit {$IMPLICITBUILD OFF} ein wenig besser fährt, da ich somit nur immer das Package compiliere und erzeuge, welches ich eben compilieren/erzeugen will. Wenn ich "Fremd"-Packages referenziere, dann will ich diese ja auch nicht unbedingt neu compilieren. Daher sehe ich eine sinnvolle Verwendung für {$IMPLICITBUILD ON} eigentlich nur für interne Zwecke und verstehe den Standardwert ON nicht wirklich. Aber gut, das kann bisher auch an meinem Verständnis liegen. Hatte bisher nur eine böse Erfahrung mit der {$IMPLICITBUILD ON} Direktive...

DSCHUCH 26. Feb 2011 12:48

AW: Packages: Was genau macht {$IMPLICITBUILD ON/OFF}
 
ich muß auch meine aussage etwas verbessern. in delphi xe funktioniert das deutlich besser mit dem laden der packages in der ide beim compilieren, das ist schon recht stabil. delphi 7 klimbert eigentlich grundsätzlich. da wir es nun endlich nach 2 jahren arbeit geschafft haben unser projekt auf unicode und xe zu bekommen, werde ich demnächst sowieso mal ein paar zeilen dazu schreiben, XE ist wirklich wesentlich besser und stabiler, auch das was beim compilieren herauskommt ist qualitativ besser.

zum thema: wie gesagt, das ON beugt vor das man UNIT/PACKAGE/Reihenfolge -Chaos hat. Ich denke mal das ist in diesem Fall DOW-Kompatibel eingestellt. Technisch gesehen ist es höherer Blödsinn.

s.h.a.r.k 26. Feb 2011 13:07

AW: Packages: Was genau macht {$IMPLICITBUILD ON/OFF}
 
Wenn man sich aber von vorn herein etwas mit Packages auseinandersetzt und die Struktur etwas sinnvoll plant, brauch man {$IMPLICITBUILD ON} doch gar nicht setzen, oder sehe ich das falsch? Man muss eben nur eine sinnvolle Build-Reihenfolge definieren und schon passt von vorn herein alles.

Problematisch wird es halt, wenn man {$IMPLICITBUILD ON} und {$IMPLICITBUILD OFF} mixt, also in verschiedenen Packages, die voneinander abhängen (-> require).


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