Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Compilerschalter vererben (https://www.delphipraxis.net/207418-compilerschalter-vererben.html)

ymair 22. Mär 2021 13:55

Compilerschalter vererben
 
Hallo liebe Delphi-Gemeinde,
ich bin gerade am Herumexperimentieren mit Gruppenprojekten in Delphi. Die Ausgangslage ist dabei folgende: Es gibt zwei ausführbare Hauptprojekte (A.exe und B.exe) und zwei verschiedene Unterprojekte/Packages (X.bpl und Y.bpl). Die Unterprojekte sind in die Hauptprojekte eingebunden und enthalten Compilerschalter (IFDEFs). Die Hauptprojekte setzen dabei die Compilerschalter (in den Delphi-Compiler-Einstellungen unter Bedingungen). Je nachdem, was das Hauptprojekt für einen Compilerschalter setzt, sollen die Unterprojekte davon mitbekommen / davon erben.

Aktuell ist es so aber nicht möglich: Ich kann nirgendwo einstellen, ob die Compilerschalter geerbt werden sollen oder nicht. Man kann nur entweder Compilerschalter für das Hauptprojekt oder eben für die Unterprojekte an sich setzen, aber keine Vererbung einstellen.

Ich hatte auch schon die Idee, dass man eine .inc-Datei definiert, dort diese Schalter setzt und die .inc-Datei dann überall hinzufügt, wo man sie braucht. Das geht so zwar, allerdings habe ich die Idee verworfen, da es in meiner Projektgröße fast nicht machbar ist, diese Datei sauber zu halten.

Meine Frage nun an euch: Habt ihr irgendeine Idee, wie man dieses Vorhaben umsetzen kann?

Grüße aus Magdeburg :)

himitsu 22. Mär 2021 14:01

AW: Compilerschalter vererben
 
Zustand der Compilerschalter wird nicht in den DCU gepeichert.

Kommen IFDEF über die Projektoptionen oder Parameder des DCC,
dann bekommt der Compiler die Änderungen nicht mit.

Lösungen:
* jedes Projekt hat seine eigenen Ausgabepfade für DCU und auch DCP/BPL (wenn mit LaufzeitPackages kompiliert wird)
* oder BuildAll statt Compile

ymair 24. Mär 2021 06:17

AW: Compilerschalter vererben
 
Vielen Dank vorab erst einmal für die schnelle Antwort!
Ich vermute aber leider, dass wir uns bei dem Ausgangsproblem falsch verstanden haben. Deswegen möchte ich das einmal genauer erklären:

Wir haben derzeit mehrere relativ komplexe Hauptprogramme, die auch an einigen Programmstellen den gleichen Quellcode ausführen, welche dann aber wiederum Compilerschalter ({$IFDEF}) je Hauptprogramm besitzen und dann für jedes Hauptprogramm jeweils noch Untermodule. Dabei ist es so, dass das Projekt dann abhängig von den Compilerschaltern kompiliert wird.

Jetzt wollen wir dieses große Gesamtprojekt in mehrere Hauptprogramme (Gruppenprojekte) und verschiedene Packages aufdröseln. Nun müssen wir in den Unterprojekten allerdings irgendwie abhängig vom Hauptprogramm Compilerschalter setzen oder eben nicht. Und unser Problem ist, dass man in Delphi in einem Unterprojekt (Package) nicht einstellen kann, dass es die Compilerschaltern vom Hauptprojekt erben soll.

Ich hoffe, unsere Situation ist nun besser verständlich :)
Wie können wir das am besten umsetzen?

Uwe Raabe 24. Mär 2021 08:06

AW: Compilerschalter vererben
 
Das ist schon eine recht komplexe Anforderung, aber ich könnte mir vorstellen, dass man da was unter Verwendung von Build-Konfigurationen, Optionsets und Buildgruppen machen kann.

Ohne den konkreten Fall im Detail zu kennen, ist es aber sehr schwierig das genau zu beschreiben. Daher hier nur mal so stichpunktartig:
  • Optionsgruppen enthalten die jeweiligen Compilerschalter
  • Build-Konfigurationen sorgen dafür, dass die DCUs in verschiedenen Verzeichnissen liegen
  • Buildgruppen erzeugen mehrere Projekte und Konfigurationen auf einmal

Blup 24. Mär 2021 11:33

AW: Compilerschalter vererben
 
Besser in den Unterprojekten alle variablen Codeteile in seperate Klassen auslagern.
- nach Änderungen werden alle Codeteile kompiliert und manche Fehler sofort gefunden
- automatische Tests können alle Fälle berücksichtigen und einzeln testen

Im Hauptprogramm einen Konfigurator initialiseren, der abhängig von den Compilerschaltern die konkret benötigten Klassen auswählt, erzeugt oder bereitstellt.
Compilerschalter möglichst nur an dieser einen Stelle auswerten.


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