Visual Studio [C++] Projekt Dependencies



  • Hallo Zusammen.
    Ich will gar nicht lange um den heißen Brei herum reden und komme gleich zu meiner Frage:
    Und zwar hab ich in einer VS Solution zwei Projekte:

    Eins davon, ich nenne es mal "B", hat eine Referenz auf das Andere ("A").
    Projekt "A" hat einige externe Abhängigkeiten ("Additional Dependencies", etc.) zu statischen Bibliotheken.
    Wenn ich diese Abhängigkeiten NICHT 1-zu-1 in die Project-Properties von "B" kopiere, resultiert der Build von "B" in einem Linking-Error.

    Jetzt stellt sich mir die Frage, ob es irgendwie möglich ist, die Funktionalität von "A" in "B" zu integrieren, ohne die Projekt-Dependencies in "B" hineinkopieren muss.

    MfG rnholzinger01



  • Ich bin nicht ganz sicher, was du mit "kopieren" usw. meinst, aber nein. Bzw., das kommt auf die Projektstruktur drauf an.
    Wenn die externen Libs Teil der API von Projekt A sind, dann muss auch B dagegen linken. Wenn du sie nur intern in cpp Dateien verwendest und die Abhängigkeit nach außer nicht sichtbar ist, dann nicht.



  • @mechanics sagte in Visual Studio [C++] Projekt Dependencies:

    Ich bin nicht ganz sicher, was du mit "kopieren" usw. meinst, aber nein. Bzw., das kommt auf die Projektstruktur drauf an.
    Wenn die externen Libs Teil der API von Projekt A sind, dann muss auch B dagegen linken. Wenn du sie nur intern in cpp Dateien verwendest und die Abhängigkeit nach außer nicht sichtbar ist, dann nicht.

    Mit Kopieren meinte ich das Einfügen der selben Abhängigkeiten in beiden Projekten.
    Wenn ich das jetzt richtig verstanden habe, muss ich die externen Libs in beiden Projekten linken, weil ich diese in den Header Dateien verwende und somit nach aussen sichtbar sind?



  • Schau dir mal das Pragma pragma comment lib an. Gerade bei vielen verschiedenen Konfigurationen und Zielmaschinen (x86/x64, Unicode/Multibyte , Debug/Release etc.) und wenn Bibliotheken in verschiedenen Projekten genutzt werden sollen, ist das viel übersichtlicher.
    In B (und anderen Projekten):

    #ifdef...
    #  ifdef...
    #    pragma comment(lib, "A.lib")
    #    pragma comment(lib, "A_zusaetzlich1.lib")
    ....
    

    Die Linker-Inputs im VS-Dialog braucht man dann nicht mehr anzufassen, man muss nur die entsprechenden Verzeichnisse setzen.
    Das geht aber auf einen Schlag für alle Konfigurationen.



  • @rnholzinger01 sagte in Visual Studio [C++] Projekt Dependencies:

    Wenn ich das jetzt richtig verstanden habe, muss ich die externen Libs in beiden Projekten linken, weil ich diese in den Header Dateien verwende und somit nach aussen sichtbar sind?

    Wenn du Objekte der entsprechenden Typen benutzt.
    Wenn in deinem Header sowas drinsteht:

    class ThirdPartyObject * createObject();

    Müsstest du noch nicht dagegen linken, weil du nur einen Zeiger zurückgibst. Aber wenn du Objekte benutzt, dann schon:

    ThirdPartyObject createObject();



  • Wenn Deine statische Bibliothek eine andere statische Bibliothek benutzt ist der Weg den yahendrik vorschlägt das beste was Du machen kannst.

    Damit erübrigt sich zumindest die Linker Seite anzupassen was die Bibliotheken betrifft. Du musst dann nur noch dafür sorgen, dass die Pfade dem Linker bekannt sind.


Log in to reply