Scons vs. CMake wo liegen die Unterschiede?



  • Was ist als gmake Ersatz besser, Scons oder Cmake?

    Was ist worin besonder gut oder schlecht, wo liegen die Unterschiede?

    http://de.wikipedia.org/wiki/CMake
    http://de.wikipedia.org/wiki/SCons



  • CMake und SCons sind vom Konzept her unterschiedlich. CMake wird vom Entwickler ausgeführt und generiert entsprechende configure/make-Skripte (bzw. je nach System andere Sachen). SCons ist dagegen wirklich ein Ersatz für make. Persönlich finde ich weder CMake noch SCons wirklich gut. CMake fand ich immer komisch zu benutzen. Irgend wie war man zu sehr vom Buildprozess ausgeschlossen. So passierte es bei einem Projekt, dass ein Minor-Minor-Versionsupgrade von CMake dazu führte, dass das bauen von statisch gelinkter Software nicht mehr ging! Am Ende war es so schlimm, dass wir einfach wieder zu einer selbst gebastelten Makefile zurück gegangen sind. SCons dagegen ist ziemlich langsam und fand ich auch nicht wirklich zufrieden stellend.

    Zur Zeit benutze ich waf. Das ist ziemlich flott und kann einige nette Sachen. Leider sind auch hier und da mal Sachen kaputt oder umständlich. Aber derzeit ist waf wohl das beste.



  • Hui, das sieht ja nett aus. Was ist denn an dem Ding kaputt?

    Ich hab jetzt ne ganze Weile SCons benutzt, aber das scheint mir mittlerweile irgendwie kaputtdesignt…



  • Habe mir mal von waf nur ein paar Beispielscripts angeschaut. Hem, sieht aber alles sehr compiler-spezifisch aus. Ist doch eher ein Rückschritt, oder?
    Ich bin bisher mit BBv2 am besten gefahren. Da hau ich compiler-unabhängig meine Scripts rein, und fertig. Warum für jeden Compiler extra die scripts pflegen?
    Oder kann waf das auch?



  • .filmor schrieb:

    Was ist denn an dem Ding kaputt?

    Unter OSX ist das Framework-Tool kaputt, als ich es das letzte mal ausprobiert habe. Ansonsten ist die Entwicklung im svn recht chaotisch und es passiert mal, dass da Dinge kaputt gehen. Aber wenn man eine fixe Version nimmt, hat man damit keine Probleme. In 1.5er-Release wurde auch viel geändert und ich habe es mir länger nicht mehr genauer angeschaut.

    @Bulli
    Was meinst du mit Compilerspezifisch? waf kann schon diverse Compiler nutzen (gcc, sun cc und msvc iirc).



  • rüdiger schrieb:

    Was meinst du mit Compilerspezifisch? waf kann schon diverse Compiler nutzen (gcc, sun cc und msvc iirc).

    Danach hab ich schon die ganze Webseite durchsucht. Das wäre nämlich ein K.O. Kriterium für mich. Interessant schaut es aus. Aber die Dokumentation ist ehr mieß, wenn man nicht mal vernünftig rausfinden kann, welche compiler unterstützt werden...



  • rüdiger schrieb:

    Was meinst du mit Compilerspezifisch? waf kann schon diverse Compiler nutzen (gcc, sun cc und msvc iirc).

    Ja, diverse Compiler wird man sicherlich nutzen können. Nur sollte man das nicht im normalen Script festhalten. Compiler-spezifische Ausnahmen sind natürlich compiler-spezifisch. Aber wenn ich z.B. sage "bau mir eine LIB aus Dateien n und linke sie zu einer ausführbaren Datei." möchte ich da nichts für Compiler drin haben.

    Schau dir mal gängige BBv2-Scripte an, da wirst generell ohne ein einziges Compiler-spezifisches Wissen zu haben.

    Ein Beispiel habe ich bei waf:

    http://waf.googlecode.com/svn/trunk/demos/cxx/wscript schrieb:

    conf.env['CXXFLAGS'] = '-D_REENTRANT -DDBG_ENABLED -Wall -O0 -ggdb3 -ftemplate-depth-128'

    Hem, ich bezweifel mal, das dieses auf einem MSC-Compiler funktioniert. Bzw. es ist ja nicht garantiert.

    Hier sehe ich nur gcc:
    http://waf.googlecode.com/svn/trunk/demos/cc/wscript

    Ich muß anmerken, das ich mir die waf-Doku nicht angeschaut habe! Ich habe einfach mal die Beispiel-Scripte angesteuert, um einen ersten Eindruck zu bekommen.

    Nun, in meinen BBv2-Scripten habe ich (bisher) nie eine Compiler-Spezifische Angabe gehabt. Trotzdem kann ich meine Projekte sowohl mit MSC als auch MinGW bauen. Ich gebe natürlich beim Aufruf des Scripts an, welchen Compiler ich benutzen will (logisch, da es BBv2 nicht erraten kann, vorallem wenn man mehrere Compiler installiert hat):

    C:> bjam.exe --toolset=gcc
    

    oder halt

    C:> bjam.exe --toolset=msvc
    

Log in to reply