GNU Build System vs CMake



  • Hallo,

    was würdet ihr verwenden? Das GNU Build System oder CMake?
    Beide haben doch Vor- und Nachteile oder?

    GNU Build System:
    + bringen die meisten Linux-Distributionen schon mit ("make")
    - kein richtiger Windows-Build

    CMake:
    + plattformübergreifend (d.h. für Linux, Windows, Mac OS))
    - muss installiert werden (nicht vorinstalliert)

    Also, was würdet ihr verwenden? Auch wenn sich das GNU System etabliert hat, CMake macht einen besseren Eindruck.

    Wie ist eure Meinung?



  • cmake ist neurer und soll mehr können und viele OS Projekte stellen irgendwann auf cmake um. Siehe KDE, siehe FlightGear.

    Es wird also schon seinen Grund haben cmake zu bevorzugen.

    Ob das jetzt insalliert ist, davon würde ich die Entscheidung nicht abhängig machen.
    Denn gerade beim Compilieren von Quellcode muss man sowieso oft dutzende von dev Bibliotheken nachinstallieren, weil sie auf dem System nicht vorhanden sind, da macht das bischen cmake auch nichts mehr aus.

    Gegen cmake spricht, dass ich mit Einführung von cmake aufgehört habe FlightGear zu compilieren. Ich war es halt nicht gewohnt und hatte auch keine Zeit, Lust mich da reinzuarbeiten.
    Und für meine eigenen kleine Sachen reicht mir heute noch gnu make.



  • Nur der Vollstaendigkeit halber: CMake brauchst du nur als Entwickler. Regulaere User, die nur die Sourcen kompilieren wollen, koennen dazu einfach den Dreisatz verwenden ohne CMake installiert zu haben.

    Typischerweise packt man in die Tarballs einfach die von CMake generierten Makefiles fuer GNU make hinein.



  • nman schrieb:

    Nur der Vollstaendigkeit halber: CMake brauchst du nur als Entwickler. Regulaere User, die nur die Sourcen kompilieren wollen, koennen dazu einfach den Dreisatz verwenden ohne CMake installiert zu haben.

    Typischerweise packt man in die Tarballs einfach die von CMake generierten Makefiles fuer GNU make hinein.

    imho nein,
    sachen wie
    -DCMAKE_INSTALL_PREFIX:PATH=
    -DLIB_SUFFIX:STRING=
    -DCMAKE_BUILD_TYPE:STRING=
    -DCMAKE_C_FLAGS:STRING=
    -DCMAKE_CXX_FLAGS:STRING=
    will man nicht verlieren.
    und cmake -Dwasauchimmer ist mittlerweile ähnlich essenziell wie configure

    zum OP:
    wenn es dir frei steht, auf jeden Fall einen makefile generator wie CMake verwenden
    gründe sind vielfältig
    man hat einfach mehr möglichkeiten,
    kann projekte (Visual Studio Eclipse, codeBlocks..) generieren
    man kann CTest verweden
    neuer buildtools wie zb Ninja sind gar nicht mehr dafür ausgelegt mit handgemachten makefiles zu arbeiten, die gehn von haus aus davon aus das man einen Generator verwendet
    ...



  • CMake hat wohl sein eigenes script-format?

    also ist jetzt CMake besser?



  • threadstarter schrieb:

    CMake hat wohl sein eigenes script-format?

    also ist jetzt CMake besser?

    ist das Wort besser is in dem Zusammenhang schwierig zu verwenden?

    CMake generiert, unter anderem oder zum Beispiel, Makefiles.
    das eigentlich build macht ja dann noch immer make.
    es ist also etwas anderes als gnu Make oder nmake.
    http://de.wikipedia.org/wiki/CMake
    das du mit der Verwendung von CMake deutlich mehr Möglichkeiten hast und die Syntax von CMake Scripten nicht wirklich komplizierter ist als Makefile Syntax macht CMake halt irgendwie flexibler, gibt mehr Möglichkeiten, is daher 'besser'?

    also sag ma ja, es ist besser 🙂



  • nman schrieb:

    Nur der Vollstaendigkeit halber: CMake brauchst du nur als Entwickler. Regulaere User, die nur die Sourcen kompilieren wollen, koennen dazu einfach den Dreisatz verwenden ohne CMake installiert zu haben.

    Typischerweise packt man in die Tarballs einfach die von CMake generierten Makefiles fuer GNU make hinein.

    spielst du da auf irgendein cmake-modul an, dass aus der CMake-Datei ein configure erzeugt?

    Normalerweise besteht der Quelltext mit CMake natuerlich nur aus den eigenen Quellen und der CMakeLists.txt und jeder ders kompilieren will, braucht selbstverstaendlich auch cmake.

    Und man liefert auf keinen Fall typischerweise den von CMake generierten Code aus!! Beim Aufruf von cmake (also zum generieren des gnu/makefile oder des vc++ projekts oder was auch immer) passieren ja schon die plattformspezifischen Checks und es wird erstmal projektspezifischer CMake-Code ausgefuehrt, der abhaengig von irgendwelchen CMake-Variablen, verschiedene Dinge tut.

    Allein die Vorstellung, sein schoenes sauberes cmake projekt, mit autohell auszuliefern 😮

    Zur Frage: cmake ist schnell und einfach zu installieren. Prinzipiell finde ich die Frage nach der Verfuegbarkeit/Popularitaet des Build-Systems schon zu beruecksichten (siehe z.B. boost mit bjam als schlecht-Beispiel) aber CMake ist schon gut verbreitet/akzeptiert und oft eh schon installiert.



  • Radiopot schrieb:

    spielst du da auf irgendein cmake-modul an, dass aus der CMake-Datei ein configure erzeugt?

    Nein, ich dachte einfach an simple Usecases, so wie man sie in 95% aller Projekte antreffen dürfte.

    "Dreisatz" ist da natürlich Blödsinn, nenne es meinetwegen "Zweisatz", auch wenn sich dann niemand mehr auskennt. 🙂



  • Ich mag weder Autotools noch CMake, finde ich zu unübersichtlich. Ich nutze stattdessen Premake. Ganz trendgemäß nutzt es Lua als Config.

    Siehe: http://industriousone.com/premake


Log in to reply