Frage zu Code Management



  • Hallo!

    Ich habe zwar keine Frage zu MFC, jedoch zu Code bzw.
    Projektmanagement in Visual Studio (Visual C++).

    Ich habe einen Solution-Ordner in dem sich mehrere
    Projekte befinden. Die meisten sind Win32 Projekte
    ohne MFC.

    Diese Projekte enthalten in ihrem jeweils eigenen
    Source Ordner ALLE einen Unterordner der eine
    Sammlung von Klassen enthält (.cpp/.h files).

    Dieser Haufen von Klassen ist in jedem Projekt gleich,
    daher würde ich gerne die Redundanz loswerden.

    Ich hab mir gedacht ich erstelle ein neues Projekt,
    das nur diese redundanten Klassen compiliert.
    Und alle anderen Projekte verwenden dann irgendwie
    den compilierten Code (ist das dann eine *.lib,
    die ich bei denen einbinden muss?).

    Da in den Klassen auch WinAPI code verwendet wird,
    lege ich am besten ein win32 Projekt an oder eine
    win32 Console Projekt? Die WinMain bleibt dann
    einfach leer?

    Hoffe Ihr könnt mir weiterhelfen.

    Und noch ne dumme Frage zum Schluss. Ich hab gesehen,
    das der Compiler für meine Projekte auch immer eine
    *.lib erstellt. Befinden sich in der lib ALLE compilierten
    Klassen und Methoden die es überhaupt gibt oder nur
    Code der in dem Projekt auch von der Applikation
    verwendet wird (sprich eine Methode die nie aufgerufen
    wird, kommt auch nicht in die lib? (was ein Problem wäre,
    wenn ich die lib von einem anderen Programm aus einbinden
    will welches die Methode vielleicht braucht)).

    Danke!!



  • Achso oder muss ich statt nem win32 Projekt
    irgendwie ein static library Projekt anlegen?


  • Mod

    Gast2010 schrieb:

    Achso oder muss ich statt nem win32 Projekt
    irgendwie ein static library Projekt anlegen?

    Japp!
    Aber Du kannst den redundanten Code auch in ein Verzeichnis legen aus dem alle die dateien in allen anderen Projekten eingefügt werden.

    Solution 
    +- Common
    +- Projekt1   (bezieht auch Dateien aus ..\Common)
    +- Projekt2   (bezieht auch Dateien aus ..\Common)
    


  • Danke für die Antwort!

    Ich hab jetzt eine static library wie folgt angelegt:
    Neues Win32 Projekt -> Häkchen bei "Statis Library" (ohne precompiled headers)

    Compiliert auch ohne Fehler 🙂

    Der Linker schmeißt allerdings 46925 warnings (!) aus
    bezüglich der Xerces C++ library die ich verwende:

    1>xerces-depdom_2D.lib(xerces-depdom_2_8D.dll) : warning LNK4006: "public: class xercesc_2_8::DOM_NodeList __thiscall xercesc_2_8::DOM_Element::getElementsByTagName(class xercesc_2_8::DOMString const &)const " (?getElementsByTagName@DOM_Element@xercesc_2_8@@QBE?AVDOM_NodeList@2@ABVDOMString@2@@Z) already defined in xerces-depdom_2.lib(xerces-depdom_2_8.dll); second definition ignored
    1>xerces-depdom_2D.lib(xerces-depdom_2_8D.dll) : warning LNK4006: "__declspec(dllimport) public: class xercesc_2_8::DOM_NodeList __thiscall xercesc_2_8::DOM_Element::getElementsByTagName(class xercesc_2_8::DOMString const &)const " (__imp_?getElementsByTagName@DOM_Element@xercesc_2_8@@QBE?AVDOM_NodeList@2@ABVDOMString@2@@Z) already defined in xerces-depdom_2.lib(xerces-depdom_2_8.dll); second definition ignored
    1>xerces-depdom_2D.lib(xerces-depdom_2_8D.dll) : warning LNK4221: no public symbols found; archive member will be inaccessible

    Wie werde ich die los? 😕
    Offenbar sind manche Symbole schon definiert und dann gibt es noch ständig
    die Meldung "no public symbols found" 😕

    Danke!!


  • Mod

    Tja. Da hast Du wohl die Symbole wirklich doppelt drin.
    Wenn Du die in der Lib hast, musst Du die CPP Dateien die in der LIB liegen natürlich aus den anderen Projekten rausnehmen.



  • Diese Meldungen bekomme ich, wenn ich die lib compiliere.



  • Na ja ich ignorier momentan erstmal die warnings,
    hab aber mal ne andere generelle Frage.

    Was mache ich denn jetzt in meinen anderen Projekten
    (welche die lib einbinden sollen) mit den ganzen
    alten #include <XYZHeader.h> Anweisungen?

    Der Code ist ja nun in der lib, aber wie wird das
    mit den Headern gemanaged?

    Danke!



  • Kopier ich die *.h Dateien in meinem lib Projekt dann mit einem Post-Build-Event
    oder so in einen extra ordner "inc", und setze dann in meinen anderen Projekten
    bei den include Pfaden einen link zu diesem "inc" Ordner?



  • Ja, kannst du so machen.
    Mache das auch immer so. Nur eben auch für die lib-Files.

    Aber es gibt bei mir immer nur einen "großen" Header, dass dann von ner anderen Anwendung included wird, dann noch die lib dazu und dann passt das.


  • Mod

    Meine Struktur sieht meistens so aus.

    -Solution
     +-Lib
       +-Bin
       +-Include
       +-Project
     +-Bin
     +-Common
     +-Projekt1
     +-Projekt2
    

    Die Projekte ziehen die Includes aus Common und Lib/Include
    In Lib/Bin liegen die eigentlichen Libs.
    in /bin werden alle Binaries erzeugt.


Log in to reply