2016-07-19 12 views
0

Erstens, das ist alter Code, den ich geerbt habe und ich würde es gerne aufräumen und es eines Tages perfekt machen, aber das kann ich heute nicht tun. Deshalb bitte ich, dass Antworten wie "schreibe das Ganze so, dass es keine zirkulären Abhängigkeiten gibt" nicht gegeben werden.Wie kann ich ein C++ - Projekt in Visual Studio 2015 mit zirkulären Abhängigkeiten erstellen?

Ich habe eine Lösung mit 44 Projekten. Die meisten Projekte erstellen DLLs und einige ausführbare Builds. Es gibt mehrere Projekte, die von einem anderen Projekt abhängen, das auf die eine oder andere Weise das erste erfordert. Einige sind so einfach wie A erfordert B.lib und B erfordert A.lib und andere sind längere Ketten, die Schleife umkehren.

Als ich den Code erbte, war es nicht sauber und es waren noch alte Build-Dateien unter der Quelle, nämlich .LIB-Dateien. Ohne diese .LIB-Dateien zu entfernen, können alle 44 Projekte erstellt werden und alle alten .LIB-Dateien werden durch neu erstellte Dateien ersetzt. Dies sagt mir, dass, wenn ich ein zweites Mal baue, keine der alten .LIBs verwendet wird und dass alle meine Ergebnisse nun vollständig aus der aktuellen Quelle generiert werden.

Das lässt mich mit einem Problem: Ich wollte alle keine Quelldateien aus der Versionskontrolle entfernen, aber wenn ich das tue, kann ich nicht mehr die Projekte erstellen.

Zum weiteren Löschen erstellen die Projekte, die DLLs erstellen, eine LIB-Datei als Zwischenschritt, und diese Dateien werden in einen gemeinsamen Ordner kopiert, der in der Eigenschaft "Zusätzliche Bibliotheksverzeichnisse" jedes Projekts und der einzelnen LIB aufgeführt ist Dateien, die für ein gegebenes Projekt benötigt werden, befinden sich in der Eigenschaft "Zusätzliche Abhängigkeiten" für dieses Projekt.

Edit: Ich bin nicht auf der Suche nach einer Generalüberholung des Codes. Ich weiß, dass alle Objektdateien, die alle Projekte benötigen, erstellt werden. Ich weiß auch, dass diese Struktur nicht optimal ist. Ich glaube jedoch, dass der Linker, wenn er weiß, wo er suchen soll, alles finden kann, was benötigt wird.

Antwort

2

Entpacken Sie nur die Teile von A, die B benötigt, in eine neue DLL 'C'. Dann machen beide A abhängig von beiden B & C, während B nur von C abhängt.

Es wird nicht einfach sein, aber immer weiter kleine Bits auf einmal extrahieren.

+0

Danke Neil. Dies ist sicherlich eine Option und ist wahrscheinlich, was ich irgendwann tun muss. –

+0

Das ist, was ich getan habe. Es hat ewig gedauert, aber jetzt funktioniert es. –

Verwandte Themen