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
Thema durchsuchen
Ansicht
Themen-Optionen

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      
Joachim S

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

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

  Alt 13. Jul 2023, 16:07
Hallo Zusammen,

es geht um Delphi 10.3, um Windows-Plattform mit VCL.

wir benutzen da eine "Basissoftware", deren Dateien alle in der Projektverwaltung angelegt sind.

Bei Projekt erstellen werden die auch brav alle durchcompiliert.

Hinzu kommen jedoch kundenspezifische Teile, die wir aus allerlei Gründen nicht in der Projektverwaltung anmelden wollen.

Wenn ich nun Compilerbedingungen definiere, möchte ich, dass auch diese Dateien mit den neuen Bedingungen neu compiliert werden.

Gibts da eine Option, die ich noch nicht gefunden habe? Bislang behelfen wir uns da mit dem Löschen der DCUs, oder indem wir in den Quelltext noch ein Leerzeichen hauen, damit er "neuer" als seine DCU wird.

Hoffe, meine Frage war verständlich...

Und nein, es ist keine Spinnerei, es ist im Prinzip wirklich praktisch, diese Dateien nicht in der Projektverwaltung zu haben

Viele Grüße, Jo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 13. Jul 2023, 16:29
Ja, über den FinalBuilder lasse ich auch mehrere PAS einzeln kompilieren (übergebe sie dort der dcc32.exe)
und anschließend können mehrere Projekte parallel (früher dcc32 und nun msbuild) kompiliert werden, welche nur noch die DCUs in ihrem Suchpfad haben,
anstatt alle versuchen diese PAS zu kompilieren und sich dadurch gegenseitig die "gleiche" Datei klauten/überschieben, da mit dem selben globalen DCU-Ausgabepfad.




Nein, es wird nur das kompiliert, was im Projekt drin ist.

Lösungen:
* alle Dateien in ein Projekt aufnehmen und das kompilieren
oder
* die Units (PAS) manuell an den jeweiligen Compiler (dcc*.exe) übergeben



PS: es wäre auch möglich je Kompilerbedingung ein anders Ausgabeverzeichnis zu nutzen
und beim Kompilieren der Projekte entsprechend das passende Suchverzeichnis.

Also je nach CompilerDefine-Mix ein anderes Verzeichnis, so wie man auch je nach Config und Platform unterschiedliche Verzeichnisse nutzen kann/sollte.





direkt einer dcc*.exe eine *.dpr, *.dpk oder eben eine pure *.pas geben

oder msbuild nimmt die *.dproj entgegen und übergibt sie an die jeweilige dcc*.exe, mit der entsprechenden *.dpr oder *.dpk

oder msbuild bekommt die *.groupproj und kompiliert daraus mehrere *.dproj (also *.dpk und *.dpr an die jeweiligen dcc*.exen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (13. Jul 2023 um 16:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

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

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

  Alt 13. Jul 2023, 17: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.604 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

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

  Alt 13. Jul 2023, 18: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
 
#5

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

  Alt 13. Jul 2023, 19: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.063 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 13. Jul 2023, 19: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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

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

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

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

  Alt 13. Jul 2023, 20: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
719 Beiträge
 
Delphi XE5 Professional
 
#8

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

  Alt 13. Jul 2023, 20: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 21:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 13. Jul 2023, 20: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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

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

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

  Alt 14. Jul 2023, 09: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
Antwort Antwort
Seite 1 von 2  1 2      


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 16:31 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