[Visual C++] zyklische Projektabhängigkeiten

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
Benutzeravatar
Krishty
Establishment
Beiträge: 8237
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

[Visual C++] zyklische Projektabhängigkeiten

Beitrag von Krishty »

And now for something completely different:

Ich habe in Visual C++ ein Hauptprojekt und zwei Kindprojekte. Die Kindprojekte hängen vom Hauptprojekt ab – in dem Sinne, dass sie neu kompiliert werden müssen, wenn sich was am Hauptprogramm ändert.

Allerdings greift das Hauptobjekt *zur Laufzeit* auf die Kompilate der Kindprojekte zu. Das Ganze ist also im Grunde zyklisch; nur dass sich die eine Richtung aufs Kompilieren bezieht und die andere auf die Laufzeit.

Jetzt bin ich da mit Visual C++, insbesondere mit den Projektabhängigkeiten (die sich dort „Referenzen“ nennen), im Debakel, sobald ich Debugging beginne:
  • Kindprojekt hängt am Hauptprojekt: Wird ein gemeinsamer Header geändert, kompilieren beide Projekte neu. Allerdings kompiliert nur dasjenige Kindprojekt neu, in dem ich gerade arbeite. Die anderen nicht, und das kracht und ich muss die anderen Kindprojekte von Hand nachkompilieren.
  • Hauptprojekt hängt an Kindprojekt: Klappt schon rein prinzipiell nicht, weil sie dann in der falschen Reihenfolge kompiliert werden.
Was ich brauche, ist eine Projekteinstellung wie: Ändert sich das Hauptprojekt, kompiliere alle Kindprojekte neu, aber nachdem das Hauptprojekt kompiliert wurde!

Habe ich den Hauch einer Chance, dass es sowas gibt, ohne von Hand Post-Build-Events einzutragen?
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Schrompf
Moderator
Beiträge: 4852
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [Visual C++] zyklische Projektabhängigkeiten

Beitrag von Schrompf »

Weiß nicht, warum dein *ganzes* Kindprojekt vom *ganzen* Hauptprojekt abhängt. Falls das wirklich so sein sollte... öhm... tja... mein Beileid. Aber falls nur einzelne Dateien von den Ergebnissen irgendeines Build-Schritt des Hauptprojektes abhängig sein sollten, sollte man das wohl mit "Zusätzliche Abhängigkeiten" in den Griff bekommen. Und irgendwo im Kontextmenü zur Solution hast Du auch einen Dialog "Build-Reihenfolge" oder so, mit dem Du evtl. auch was machen kannst.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: [Visual C++] zyklische Projektabhängigkeiten

Beitrag von dot »

Ich versteh das Problem nicht ganz. Das Hauptprojekt benötigt die Kindprojekte, von daher sollte es also in der Buildorder (Project Dependencies in einer Solution können separat festgelegt werden, wie du sicher weißt) von diesen abhängen. Der Build der Kindprojekte braucht ja wohl nicht die Binary des Hauptprojektes, also ist doch alles in Butter? Wenn du einen gemeinsamen Header änderst, wird MSVC feststellen, dass dadurch die Kindprojekte outdated sind und neu gebaut werden müssen, sobald du das Hauptprojekt baust...
Benutzeravatar
Krishty
Establishment
Beiträge: 8237
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Visual C++] zyklische Projektabhängigkeiten

Beitrag von Krishty »

dot hat geschrieben:Der Build der Kindprojekte braucht ja wohl nicht die Binary des Hauptprojektes
Doch, bzw. die Import Library, die davon generiert wird :(
Wenn du einen gemeinsamen Header änderst, wird MSVC feststellen, dass dadurch die Kindprojekte outdated sind und neu gebaut werden müssen, sobald du das Hauptprojekt baust...
Nein – Visual C++ baut nur das Projekt neu, das gerade als Startprojekt festgelegt ist, und dessen Abhängigkeiten. Die Engine kann aber nicht von den Plugins abhängen.
Schrompf hat geschrieben:Weiß nicht, warum dein *ganzes* Kindprojekt vom *ganzen* Hauptprojekt abhängt. Falls das wirklich so sein sollte... öhm... tja... mein Beileid. Aber falls nur einzelne Dateien von den Ergebnissen irgendeines Build-Schritt des Hauptprojektes abhängig sein sollten, sollte man das wohl mit "Zusätzliche Abhängigkeiten" in den Griff bekommen. Und irgendwo im Kontextmenü zur Solution hast Du auch einen Dialog "Build-Reihenfolge" oder so, mit dem Du evtl. auch was machen kannst.
Das Hauptprojekt ist meine Engine und die Kindprojekte sind Plugins. Die Plugins benötigen die Liste der exportierten Funktionen (gemeinsamer Quelltext) und die Importanweisungen (darum muss die Engine zuerst kompiliert werden). Wenn sich an diesen exportierten Funktionen was ändert, sollen die Plugins aber bitteschön ebenfalls neukompiliert werden; das ist gerade problematisch.

Ich habe eben geprüft, ob die Build-Reihenfolge irgendwie manuell festgelegt werden kann, aber sie hängt wohl ausschließlich von den Project Dependencies ab, die deprecated sind und durch Project References überschrieben werden.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Matthias Gubisch
Establishment
Beiträge: 470
Registriert: 01.03.2009, 19:09

Re: [Visual C++] zyklische Projektabhängigkeiten

Beitrag von Matthias Gubisch »

Krishty hat geschrieben:
Wenn du einen gemeinsamen Header änderst, wird MSVC feststellen, dass dadurch die Kindprojekte outdated sind und neu gebaut werden müssen, sobald du das Hauptprojekt baust...
Nein – Visual C++ baut nur das Projekt neu, das gerade als Startprojekt festgelegt ist, und dessen Abhängigkeiten. Die Engine kann aber nicht von den Plugins abhängen.
Es gibt irgendwo in den Optionen einen Haken ob er immer alles prüfen soll ob es neu gebaut werden muss oder nur das aktuelle Startprojekt samt Abhängikeiten. Hab leider grad kein VS zur Hand, deshalb kann ich dir nicht genauer sagen wo die Einstellung vergraben ist.
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4256
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: [Visual C++] zyklische Projektabhängigkeiten

Beitrag von Chromanoid »

Wie wäre es mit einem weiteren Projekt, das alle drei Projekte als Anwendung zusammenfasst? Vom Konzept her eine Art Distribution der Anwendung. Das ist wesentlich sauberer und entspricht viel eher dem Plugingedanken, so kannst Du auch leicht verschiedene Plugin-Konstellationen inkl. Konfigurationsdateien und zusätzlicher Assets fest als Projekte hinterlegen.

Code: Alles auswählen

Game
|-> Engine-Core
|-> Plugin-A -> Engine-Core
|-> Plugin-B -> Engine-Core
Benutzeravatar
Krishty
Establishment
Beiträge: 8237
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Visual C++] zyklische Projektabhängigkeiten

Beitrag von Krishty »

Gute Idee; danke! :)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: [Visual C++] zyklische Projektabhängigkeiten

Beitrag von dot »

Ja, das ist in der Tat eine gute Idee :)
Antworten