Library, Unity Builds oder Object files kombinieren



  • Hallo, mein Projekt fängt an eine grösse anzunehmen, bei dem ich einige Funktionen in externe Dateien auslagern möchte. Nun stellt sich die Frage, wie ich das am besten anstellen soll. Ziel ist es, bei jedem kompilieren nur die veränderten Funktionen neu erstellen zu müssen und dann mit den, bereits verarbeiteten zu linken um ein ausführbahres Programm zu erhalten.

    Ich benutze den GNU GCC Compiler unter Linux. Zusätzlich benutze ich openCV in meinem Projekt. Aktuell kompiliere ich mit folgenden Parameter, wobei $1 der Name der c++ Datei ist und $2 der Name des Programmes.

    sudo g++ `pkg-config opencv --cflags` -c src/$1.cpp -o ./build/$2 `pkg-config opencv --libs` -v
    

    Das erste, was ich versucht habe war eine static library von diesem Link:
    http://www.adp-gmbh.ch/cpp/gcc/create_lib.html

    Dies ist jedoch sehr ungünstig, da ich die library aktuell noch zu oft verändern muss. Ausserdem kann ich nicht auf eine static library zugreifen, da openCV bereits shared librarys hat und der Parameter -static somit nicht angenommen wird.

    Nach weiterem lesen im Internet bin ich dann auf eine Methode gestossen, meine Funktionen, welche ich auslagere als object files (.o) zu kompilieren, dann mein main Programm als object file und diese zu linken um anschliessend das ausführbahre Programm zu haben.

    Eine weitere Methode die ich gefunden habe nennt sich Unity Build.
    http://buffered.io/posts/the-magic-of-unity-builds/
    http://buffered.io/posts/screencast-setting-up-unity-builds/

    Es stellt sich nun die Frage, welche Methode am besten geeignet ist um Funktionen auszulagern, und nicht permanent neu kompilieren zu müssen.

    Danke, lyinch!



  • Kommt mir grade alles sehr merkwürdig vor:

    • Warum sudo?
    • Verwendest du ein build system?
    • Warum g++ Aufruf von Hand?
    • Wie lange brauchst du denn für einen kompletten Rebuild?

    Als aller Erstes würde ich unter Linux ccache empfehlen, das bringt schonmal massiv Build Speed.



  • nurf schrieb:

    Als aller Erstes würde ich unter Linux ccache empfehlen, das bringt schonmal massiv Build Speed.

    Nö. ccache bringt nur bei rebuilds etwas, und ein gutes Buildsystem verhindert diese.

    lyinch soll sich Makefiles, automake oder CMake anschauen.



  • ccache schrieb:

    Nö. ccache bringt nur bei rebuilds etwas, und ein gutes Buildsystem verhindert diese.

    Dann schau mal nach CCACHE_SLOPPINESS und CCACHE_BASEDIR.

    CMake ist sicherlich das Mittel zur Wahl.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten