Open Source im professionellen Einsatz

Newsletter abonnieren
Seite durchsuchen

HEFTARCHIV | NEWS | E-BIBLIOTHEK | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO | SHOP

user friendly

  Home  »  Heft & Abo  »  Heftarchiv  »  2007  »  02  »  Mal ausspannen  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

Neue Dateien beim Build

Eine der anspruchsvollen Aufgaben eines Buildsystems ist es, erst während des Buildvorgangs neue Dateien zu erzeugen, die es daraufhin kompiliert. Das ist zum Beispiel bei der Arbeit mit dem Corba-IDL-Compiler, dem Metaobject-Compiler »moc« von Qt oder auch mit Flex und Bison notwendig. Zur Demonstration genügt ein triviales Beispiel (Listing 8), das mit dem Befehl »cp« eine Datei erzeugt (nicht portabel).

Listing 8: Dateien erzeugen
01 add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated.h
02                    COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.source ${CMAKE_CURRENT_BINARY_DIR}/generated.h
03                    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.source )
04 
05 add_executable(hello main.c ${CMAKE_CURRENT_BINARY_DIR}/generated.h)

Der Befehl »add_custom_command()« in Zeile 1 spezifiziert eine Anweisung, die die unter »OUTPUT« aufgeführte Datei »generated.h« erzeugen kann, den dazu notwendigen Befehl und von welcher Datei die zu generierende Datei anhängt, wann sie also neu erzeugt werden muss. Wie erwähnt sollten Programmierer Dateien nie im Quelltextbaum, sondern immer im Buildverzeichnis erzeugen, dafür sorgt hier »CMAKE_CURRENT_BINARY_DIR«. Wichtig ist, die generierte Datei zu den Quelldateien für das Target hinzuzufügen. Nur dann erkennt Cmake die Abhängigkeit des Target von der generierten Datei und erzeugt sie gegebenenfalls vor dem Target.

Cmake ist keine komplette Programmiersprache, unterstützt aber Makros, um die Les- und Wartbarkeit zu erhöhen. Die Listings 9a und 9b zeigen ein einfaches Beispiel. Die Zeilen 1 bis 6 (Listing 9a) definieren ein Makro mit dem Namen »print_all_args«, das mindestens ein Argument »_greeting« erwartet. Ruft man es mit mehr Argumenten auf, hilft die spezielle Variable »ARGN« dabei, auf sie zuzugreifen. In den Zeilen 3 bis 5 iteriert eine »foreach()«-Schleife über die zusätzlichen Argumente und gibt sie aus. Die in Zeile 8 definierte Liste dient in Zeile 10 dem Makro als Argument. Viele Dinge lassen sich vereinfachen, indem Entwickler Komplexität in einem Makro verstecken, um sich danach nicht mehr um die Details kümmern zu müssen.

Listing 9a: Makros definiert
01 macro(print_all_args _greeting)
02    message(STATUS "${_greeting}")
03    foreach(_currentItem ${ARGN})
04       message(STATUS "current item: ${_currentItem}")
01    endforeach(_currentItem)
06 endmacro(print_all_args)
07 
08 set(fooSrcs main.cpp widget.cpp process.cpp)
09 
10 print_all_args("Hallo Welt" ${fooSrcs})
Listing 9b: Makros angewandt
01 ~/src/macrotest$ cmake .
02 -- Hallo Welt
03 -- current item: main.cpp
04 -- current item: widget.cpp
05 -- current item: process.cpp
06 -- Configuring done
07 -- Generating done
08 -- Build files have been written to: ~/src/macrotest

Fazit

Der Artikel hat die wichtigsten Features von Cmake vorgestellt, die als Einstieg für eigene Projekte genügen. Nicht zur Sprache kamen zum Beispiel das leistungsfähige und flexible »RPATH«-Handling von Cmake, die Unterstützung von Regular Expressions und das Ausführen von Programmen. Diese Funktionen zusammen ermöglichen es, mit Cmake sehr leistungsfähige Buildskripte zu schreiben. Informationsquellen nennt der Kasten "Dokumentation". Da inzwischen das KDE-Projekt Cmake einsetzt, sind auch im KDE Subversion Repository [2] viele Beispiele für die Benutzung von Cmake zu finden.

Dokumentation

Cmake bringt eine Manpage mit, die alle Befehle und enthaltenen Module dokumentiert. Die gleiche Dokumentation findet sich noch einmal auf der Cmake-Homepage. Das Cmake-Wiki bietet darüber hinaus eine große Menge an zusätzlichen Informationen: Tutorials, eine Übersicht über Cmake-interne Variablen sowie eine FAQ.

Wenn das alles nicht reicht, gibt es noch die Mailingliste [cmake@cmake.org], auf der auch die Entwickler vertreten sind und Fragen beantworten. Wer Papier bevorzugt, findet im Buchhandel "Mastering Cmake", das auch Themen für Fortgeschrittene erläutert. Eine Vielzahl an Beispielen führt das Subversion-Repository von KDE [2].

In Cmake finden die C/C++-Entwickler ein Werkzeug, das den Buildvorgang von einem kaum noch durchschaubaren Mysterium wieder zum alltäglichen Handwerk macht, sodass sie sich wieder voll auf den eigentlichen Code konzentrieren können. Cmake wird aktiv entwickelt und die Entwickler- und Anwendergemeinde wächst rapide. Fast jeden Tag kündigt ein weiteres Projekt an, auf Cmake umzusteigen.

Es lohnt sich für jeden, der die Autotools nicht vollständig beherrscht, in Cmake einzusteigen, um seine Software wieder selbst kompilieren zu können - und das nicht nur unter Linux, sondern sofort auch unter Mac OS X und MS Windows. Viele Anzeichen deuten darauf hin, dass Cmake auf dem besten Weg ist, das neue Standard-Buildsystem für freie Software zu werden. (ofr)

Infos

[1] Cmake: [http://www.cmake.org]

[2] KDE Subversion Repository: [http://websvn.kde.org/trunk/KDE/kdelibs/cmake/modules/]

[3] Kitware Inc.: [http://www.kitware.com]

[4] Insight Segmentation and Registration Toolkit: [http://www.itk.org]

[5] Valgrind: [http://www.valgrind.org]

[6] KWStyle: [http://public.kitware.com/KWStyle]

[7] Cmake-Dashboard: [http://www.cmake.org/Testing/Dashboard/MostRecentResults-Nightly/Dashboard.html]

Der Autor

Alexander Neundorf hat 2002 sein Diplom im Studiengang Ingenieurinformatik an der TU Ilmenau erworben. Seither beschäftigt er sich bei der Jenoptik LOS GmbH als Entwickler mit digitalen Kameras für den professionellen Einsatz. Seit 1998 ist er aktiv am KDE Projekt beteiligt und seit 2006 Maintainer des Cmake-basierten Buildsystems für KDE 4.

Sie können diesen Artikel als PDF für 99 Cent kaufen. Klicken Sie dazu einfach auf eine der beiden Bezahloptionen Paypal oder ClickandBuy.


Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Ähnliche Artikel
Sonnenstudio Suns Entwicklungsumgebung Studio unter Linux
Optimierung mit Profil System-Profiling mit Oprofile
Geistertanz Die Skriptsprache Boo
Verbindungssuche Ohne Netzverbindung mit Dateien eines Netzwerk-Filesystems arbeiten
Alles rausquetschen Tipps und kleine Tools fürs Paketmanagement
Vom Thron gestürzt Die besten Lesereinsendungen des Programmierwettbewerbs
Whitepaper
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele (Folge 2)

Der zweite Teil des Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele White Papers beleuchtet anhand weiterer ausgewählter Case Studies die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
Usage Landscape Enterprise Open Source Data Integration

Die Nachfrage nach Datenintegrationslösungen für Unternehmen ist zunehmend gestiegen und vor allem das Interesse an Open Source Technologien wird immer größer. Doch wie und von wem werden Open Source Datenintegrationslösungen genutzt und welches Nutzungsverhalten lässt sich daraus ableiten? Das vorliegende White Paper präsentiert die Erfahrungswerte von über 1000 Open Source Nutzern und liefert fundierte Antworten auf diese Fragen.

Download PDF (Registrierung erforderlich)
Kommentare (0)