Welches Buildsystem?

Developer-Tools, Entwicklungsumgebungen und alles andere, was sich installieren lässt
Antworten
Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Welches Buildsystem?

Beitrag von Kerli » Fr Apr 24, 2009 3:56 pm

Nachdem ich bis jetzt fast ausschließlich mit Make als Buildsystem gemacht habe aber Make leider doch einige Schwächen hat, habe ich mir immer wieder einmal Alternativen angeschaut, bisher aber nicht unbedingt erfolgreich. Jetzt bin ich aber über die Uni an CMake gekommen, und hab mich jetzt etwas damit beschäftigt und muss sagen, dass es mir immer mehr gefällt.

Man kann extrem einfach Projekte erstellen und diese Plattformübergreifend kompilieren. Man trägt in einer simplen Textdatei ein welche Dateien benötigt werden und was daraus erstellt werden soll (statische/dynamische Bibliothek, Executable) und muss dann nur mehr 'cmake' gefolgt von 'make' eingeben und das ist alles. Wenn man zum Beispiel unter Windows CMake ausführt kann man eine Visual Studio Projektdatei erstellen lassen, ohne dabei irgendwas an der zuvor erstellten Builddatei ändern zu müssen. Was mir aber am Besten gefällt ist das testen auf vorhanden Bibliotheken. Wenn ich in meinem Projekt zum Beispiel ein paar Boost Bibliotheken brauche trage ich zb folgendes ein:

Code: Alles auswählen

find_package( Boost 1.37.0 REQUIRED signals thread )
target_link_libraries(ole_generator ${Boost_LIBRARIES})
Das sagt CMake das ich Boost.Signals und Boost.Thread jeweils mindestens in der Version 1.37.0 benötige. CMake sucht dann automatisch nach den Bibliotheken und stellt dabei auch Suffixe und Prefixe fest (bei Boost zb -mt, -d, ...) und schreibt die Ergebnisse in die Variable 'Boost_LIBRARIES'. Danach brauch ich die gefundenen Bibliotheken nur mehr mit der zweiten Zeile zu meiner Bibliothek 'ole_generator' (kann auch eine ausführbare Datei sein) linken. Sollten Die Bibliotheken nicht gefunden werden, dann wird eine Fehlermeldung ausgegeben, dass die Boostbibliotheken nicht in der erforderlichen Version vorhanden sind. So kann es nicht passieren das man wie bei Make mit Fehlermeldungen wie 'undefined ...' überhäuft wird, wenn eine Abhängigkeit nicht erfüllt ist.

Aus jetziger Sicht scheint mir also CMake sehr großes Potential zu haben. Jetzt würde mich interessieren ob jemand von euch auch mit CMake oder einem anderen Buildsystem (nicht make/autotools) bereits Erfahrungen gemacht hat. Wichtige Punkte sind dabei für mich möglichst einfache Plattformunabhängigkeit und das Suchen von Bibliotheken bzw. Abhängigkeiten.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

dP.
Beiträge: 23
Registriert: Di Apr 14, 2009 2:52 pm

Re: Welches Buildsystem?

Beitrag von dP. » Fr Apr 24, 2009 5:58 pm

Vielleicht gewinnst du ja hier ein paar Eindrücke. Einfach im verlinkten Unterforum nach "Build-Systeme" suchen.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Welches Buildsystem?

Beitrag von Kerli » Fr Apr 24, 2009 7:24 pm

dP. hat geschrieben:Vielleicht gewinnst du ja hier ein paar Eindrücke. Einfach im verlinkten Unterforum nach "Build-Systeme" suchen.
Danke, da sind ein paar ganz interessante Artikel drinnen. Ich mir einmal alle Artikel dort zu den Buildsystemen durchgelesen:

Apache Ant:
Ist mir irgendwie zu stark auf Java ausgelegt und benötigt auch eine volle Java Runtime Umgebung. Außerdem gefällt mir das mit den XML-Dateien zur Steuerung des Buildvorganges irgendwie nicht so sehr.

SCons:
Das hab ich mir auch schon überlegt und es kommt am ehesten noch an CMake heran. Was ich dort als Nachteile sehe, ist das man einen Python Interpreter benötigt und das eben durch die Verwendung von Python die Buildscripte etwas aufgeblasen werden.

Hier ein Beispiel mit SCons:

Code: Alles auswählen

#SConstruct
env = Environment()
conf = Configure(env)

if not conf.CheckLib('gdk'):
  print "Couldn't find gdk library. Exiting."
  Exit(1)

env.Program('main.cpp')
 
env = conf.Finish()
Und das gleiche mit CMake

Code: Alles auswählen

find_package( GDK REQUIRED )
target_link_libraries(main ${GDK_LIBRARIES})
Boost.Build:
Hier gefällt mir gut das das Erstellen mehrere Targets so einfach geht. Was mir dort aber nicht so gut gefällt ist die Syntax und vor allem das es scheinbar keine so mächtige Funktion gibt zum Aufspüren von Abhängigkeiten.

GNU Autotools:
Die möchte ich eigentlich vermeiden, da sie nur auf Linux fixiert sind und nur mit einer portierten Shell auch unter Windows verwendet werden können.


Bis jetzt kommt es mir so vor als wäre CMake zumindest für mich die Beste Wahl. Ich finde CMake zeichnet sich durch eine klare und einfache Syntax und vor allem durch die mächtigen Suchfunktionen und Abhängigkeitstest aus. Und bis jetzt habe ich keine Alternativen gefunden die dabei mithalten können.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Welches Buildsystem?

Beitrag von Dirty Oerti » Do Mai 21, 2009 7:43 pm

*Wiederbeleb*

So, da ich mich nun wohl auch mit CMake auseinandersetzen werde brauche ich eines:
Gute, ausführliche Tutorials und möglichst eine Referenz, die mir alle Möglichkeiten von CMake listet.
Wo finde ich das? :)
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Welches Buildsystem?

Beitrag von Kerli » Do Mai 21, 2009 9:03 pm

Dirty Oerti hat geschrieben:Gute, ausführliche Tutorials und möglichst eine Referenz, die mir alle Möglichkeiten von CMake listet.
Wo finde ich das? :)
Dieses PDF ist einmal ein ganz guter Einstieg und dann wären da noch das Wiki und die Dokumentation...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Antworten