AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Alle Dateien "durchcompilieren" erzwingen, auch wenn sie nicht im Projekt sind

Alle Dateien "durchcompilieren" erzwingen, auch wenn sie nicht im Projekt sind

Ein Thema von Joachim S · begonnen am 13. Jul 2023 · letzter Beitrag vom 14. Jul 2023
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
717 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Alle Dateien "durchcompilieren" erzwingen, auch wenn sie nicht im Projekt sind

  Alt 13. Jul 2023, 16:49
Nein, es wird nur das kompiliert, was im Projekt drin ist.
Das ist doch Unsinn.

Ein Aufruf von "Build" erzeugt alles neu wozu Quelltexte gefunden werden. Egal ob im Projekt (also in der DPR) mit eingetragen ist. Hautpsache ist, dass es irgendwo als Unit in einer unit des Projektes mit referenziert wird.

Eines meiner Projekte hat 1430 Units in Verwendung. Davon sind gut 90 in der DPR eingetragen. Trotzdem werden die bei Aufruf von "Build" neu erzeugt.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.687 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Alle Dateien "durchcompilieren" erzwingen, auch wenn sie nicht im Projekt sind

  Alt 13. Jul 2023, 17:07
Wenn man wirklich paranoid ist, kann man die Dateien im DCU-Ausgabeverzeichnis löschen, dann ist sichergestellt, dass sie neu erzeugt werden.
Thomas Mueller
  Mit Zitat antworten Zitat
Joachim S

Registriert seit: 13. Jul 2023
5 Beiträge
 
#3

AW: Alle Dateien "durchcompilieren" erzwingen, auch wenn sie nicht im Projekt sind

  Alt 13. Jul 2023, 18:11
Hi Zusammen,


Eines meiner Projekte hat 1430 Units in Verwendung. Davon sind gut 90 in der DPR eingetragen. Trotzdem w.rden die bei Aufruf von "Build" neu erzeugt.


ne, werden sie definitiv nicht. Jedenfalls nicht zuverlässig.

Es ist so, dass ich mehrere ähnliche Anlagen mit jeweils ner eigenen .exe steuere. Jede hat nen eigenen Rechner, auf dem diese Exe läuft.

Dabei benutze ich je nach Anlage andere Compiler-Definitionen, um auf die Unterschiede einzugehen. Irgendwo habe ich einen "Share-Ordner", der die gemeinsamen kundenspezifischen Quellcodeteile enthält.

Der wird leider nicht zuverlässig durchcompiliert, wenn ich zu einer anderen Maschine wechsle.

Das weiß ich definitiv. Wie gesagt, dcus löschen oder Quellcode "ändern". Dann erst gehts.

Vlt. mache ich mir ne kleine Batch oder exe, um die DCUs zu löschen... Chick wäre, wenn die IDE die vorm Erstellen selbst aufrufen könnte...

Gruß Jo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.376 Beiträge
 
Delphi 12 Athens
 
#4

AW: Alle Dateien "durchcompilieren" erzwingen, auch wenn sie nicht im Projekt sind

  Alt 13. Jul 2023, 18:41
Das ist doch Unsinn.

Ein Aufruf von "Build" erzeugt alles neu wozu Quelltexte gefunden werden.
Doch, es erzeugt nur das, was im Projekt ist, inkl. dem was davon eingebunden wurde und was wiederrum davon eingebunden wurde und .... aber IMMER nur das, was eben vom Projekt "benutzt" wird.

Build oder Compiler ist erstmal egal ... es wird auch nur das kompiliert, wo die PAS gefunden wird, entsprechend dem vorherigen Satz.
Beim Build immer neu und beim Compile was neu ist oder verändert wurde.

Findet der Compiler nur die DCU (zuerst) und nicht die PAS, dann wird das nicht neu kompiliert ... kann ja auch.
Und ist eine Unit nicht im Projekt, bzw. wird nicht davon benutzt, dann wird sie auch nicht kompiliert. (warum auch ... der Compiler kennt jene Unit auch nicht, bzw. will sie nicht kennen)



z.B. die hauseigenen Quellcodes des Delphi (ala Forms.pas bzw. Vcl.Forms.pas) sind standardmäßig nicht im Suchpfad des Compiler enthalten, drum werden sie eigentlich auch nie neu kompiliert.
Der Compiler findet hier normal immer nur die DCUs (oder den Link in der DCP, wenn man mit LaufzeitPackages kompiliert).
Nur der Editor hat diese PAS in "seinem" Suchpfad, damit man z.B. den Code schön im Debugger verfolgen kann.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (13. Jul 2023 um 18:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.646 Beiträge
 
Delphi 12 Athens
 
#5

AW: Alle Dateien "durchcompilieren" erzwingen, auch wenn sie nicht im Projekt sind

  Alt 13. Jul 2023, 19:03
es erzeugt nur das, was im Projekt ist, inkl. dem was davon eingebunden wurde und was wiederrum davon eingebunden wurde und .... aber IMMER nur das, was eben vom Projekt "benutzt" wird.
Das ist aber offenbar gegeben. Andernfalls würde das Löschen der DCUs oder das Ändern der Quellen auch nicht zu einem erneuten Compilieren führen:
Wie gesagt, dcus löschen oder Quellcode "ändern". Dann erst gehts.
Wichtig ist eben das Build - bei einem simplen Compile funktioniert es eben nur unter den genannten Bedingungen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
722 Beiträge
 
Delphi XE5 Professional
 
#6

AW: Alle Dateien "durchcompilieren" erzwingen, auch wenn sie nicht im Projekt sind

  Alt 13. Jul 2023, 19:14
Für solche Fälle habe ich mehrere Dummy-Projekte mit dem Namen
__Alle_Projekte_Kompilieren.dpr
__Alle_Units_Kompilieren.dpr
angelegt, wo ich hinter Uses alle Units aufgeführt habe.
Bei mir funktioniert es gut.
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 (13. Jul 2023 um 20:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.376 Beiträge
 
Delphi 12 Athens
 
#7

AW: Alle Dateien "durchcompilieren" erzwingen, auch wenn sie nicht im Projekt sind

  Alt 13. Jul 2023, 19:31
Und wichtig, eine geänderte INC oder ein geändertes DEFINE (in einer INC oder in den Projektoptionen) ist keine Änderung der Unit (PAS) und löst beim "Compile" auch kein Neuerzeugen aus.


Eigentlich klang Post #1 auch so, als wenn er ein "Build" durchführt.



Nja, mit dem Process Monitor von Sysinternal könnte man mal verfolgen welche PAS bzw. DCU er von wo sich vornimmt, bzw. wo er sie sucht.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
717 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Alle Dateien "durchcompilieren" erzwingen, auch wenn sie nicht im Projekt sind

  Alt 14. Jul 2023, 08:28
Hier ist noch was anderes nicht optimal, was auch bei meinem Monsterprojekt vorhanden ist aber mindestens seit XE2 keine Probleme mehr gemacht hat :
Via Compiler directive zwischen unterschiedlichen Implementierungen zu unterscheiden.

Wenn die Schalter sauber in den Projekt Optionen eingetragen sind, klappt es. Stehen sie nur in der DPR klappt es nicht zuverlässig. Bis Heute nicht.
Allerdings finde ich das extrem grenzwertig und habe es durch aufteilen von Units auf ein absolutes minimum reduziert.

Ich finde es besser Funktionen mit Parametern/Schaltern aufzurufen, je nachdem wofür sie gebraucht werden.

Compilierst du jedes Projekt in sein eigenes Ausgabeverzeichniss für Exe und Units? Damit kann man klar erkennen was neu erstellt wurde und was nicht.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.376 Beiträge
 
Delphi 12 Athens
 
#9

AW: Alle Dateien "durchcompilieren" erzwingen, auch wenn sie nicht im Projekt sind

  Alt 14. Jul 2023, 08:53
In Projektoptionen, oder als Parameter an DCC*.exe bzw. msbuild.exe,
ist der Schalter überall/global verfügbar/aktiv, außer dort, wo nicht neu kompiliert wird,
oder wo er lokal in der Unit durch ein weiteres {$DEFINE} bzw. {$UNDEF} überschrieben wird.

In Projekt-Datei oder einer Unit ... Tja, nicht alle CompilerSchalter werden über UnitGrenzen durchgereicht ... eigentlich fast Keine (außer Jene, für das nachfolgende MAKE, wie z.B. die {$MAXSTACKSIZE}, {$IMAGEBASE} oder {$SetPEFlags} ), aber vor allem nicht kein {$DEFINE}.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (14. Jul 2023 um 08:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.646 Beiträge
 
Delphi 12 Athens
 
#10

AW: Alle Dateien "durchcompilieren" erzwingen, auch wenn sie nicht im Projekt sind

  Alt 14. Jul 2023, 09:02
Compilierst du jedes Projekt in sein eigenes Ausgabeverzeichniss für Exe und Units? Damit kann man klar erkennen was neu erstellt wurde und was nicht.
Units, ja - Exe, nein. Aber das hat immer noch den gewünschten Effekt. Für die Exe gibt es ein gemeinsamen bin-Verzeichnis mit z.B. den nötigen Konfigurationsdateien. Damit verwenden auch unterschiedliche Kompilate immer dieselbe Umgebung. Die Units landen bei simplen Projekten in $(Platform)\$(Config) bzw. bei Projektgruppen in $(SanitizedProjectName)\$(Platform)\$(Config). Änderungen an den Defines, die ja ein neues Build erfordern, werden damit deutlich seltener und ein Projekt-, Plattform- oder Konfigurations-Wechsel erfordert nicht jedes Mal ein Build, was oft vergessen wird.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:26 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