RAD Studio 10.1 Berlin: Projektabhängigkeiten



  • Hallo,

    das RAD Studio 10.1 Berlin Update 2 überrascht mich immer wieder mit neuen Features:

    Ich habe mehrere Projekte (8 statische Bibliotheken, 1 VCL Forms Anwendung), die ich in einer Projektgruppe zusammengefasst habe. Man kann für jedes Projekt die Buildkonfiguration separat einstellen (Debug/Release). Wenn ich im Projekt, das die .exe baut, die Abhängigkeiten von den anderen Projekten einstelle, werden alle Projekte, von denen die .exe abhängt, mit der Buildkonfiguration der .exe gebaut. Das ist insofern doof, weil der Linker die .exe im Debug Modus wegen LME288 (Linker out of memory) nicht mehr linken kann.
    Trage ich die Abhängigkeiten nicht ein baut der Linker Mist, weil der Compiler Änderungen in den übrigen Projekten nicht mitbekommt und nicht neu übersetzt. Dann linkt der Linker irgendwas zusammen und die exe erzeugt beim Starten Zugriffsfehler. Die Lösung besteht dann darin, das Projekt mit den Änderungen manuell neu zu übersetzen und für Projekte, die davon abhängen, komplett neu zu bauen. Dauert dann immer ne Stunde und ist nicht zumutbar.
    Überhaupt habe ich den Eindruck, dass die IDE Probleme beim Erkennen von geänderten Dateien hat. Mir ist es schon mehrmals passiert, dass Compiler und Linker bei einem Build all ohne Fehler durchlaufen und eine .exe produzieren, die sich ausführen lässt. Beim nächsten Durchlauf bekomme ich plötzlich eine Fehlermeldung der Art:

    void Test::stop()
    {
    }
    
    void Test::some_func()
    {
       sotp();
    }
    

    Compiler schrieb:

    [bcc32c Fehler] Test.cpp(xy): Verwendung vom nicht deklariertem Bezeichner 'sotp'

    Wieso ist der beim 1. Durchlauf nicht erkannt worden?

    Genauso bekomme ich sporadisch Linkerfehler, dass eine bestimmte Klasse vom Linker nicht gefunden werden konnte. Im Projekt ist sie 100%ig vorhanden und ist auch in die entsprechende .lib kompiliert worden. Nach einem Build All funktioniert´s dann meistens wieder, dauert aber auch wieder ne Stunde. Ich habe bisher nicht herausfinden können, woran das jetzt genau liegt.

    So, und jetzt zu den Fragen 😉

    1. Hat jemand eine Ahnung, wie man die Vererbung der Buildkonfiguration abschalten kann? Manche Projekte brauche ich nur im Release-Modus, weil sie fehlerfrei und getestet sind. Im Debug Modus werden die erzeugten .libs zu groß und lassen den Linker platzen. Ich möchte die .exe im Debug Modus übersetzen und die übrigen Projekte im Release Modus.
    2. Hat jemand ähnliche Erfahrungen mit dem Compiler/Linker gemacht, dass er geänderte Dateien nicht neu übersetzt oder linkt. Gibt´s Lösungen dafür?

    Edit:
    Zu 1)
    Man kann in den Projekteigenschaften die Auto-Abhängigkeitsüberprüfungen deaktivieren, um individuelle Konfigurationen zu bauen. Dann erkennt das übergeordnete Projekt zwar keine Änderungen mehr in den untergeordneten Projekten, aber damit hat´s ja sowieso Probleme.

    Edit II:
    Funktioniert doch nicht, es werden alle untergeordneten Projekte mit der gleichen Konfiguration wie das übergeordnete Projekt gebaut.