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

Der Cache

Ruft der Programmierer im obigen Beispiel noch einmal »make« auf, passiert mehr oder weniger nichts:

~/src/myproj-build $ make
[ 60%] Built target util
[100%] Built target fooapp

Bei einer Änderung an einer der »CMakeLists.txt«-Dateien veranlasst Make von sich aus einen automatischen Neustart von Cmake, um die entsprechenden Makefiles neu zu erzeugen:

$ touch ~/src/myproj/CMakeLists.txt
$ make
-- Configuring done
-- Generating done
-- Build files have been written to: ~/src/myproj-build
[ 60%] Built target util
[100%] Built target fooapp

Die Meldungen »Configuring done« und »Generating done« generiert Cmake beim Ausführen der »CMakeLists.txt«. Der Entwickler muss Cmake also prinzipiell nur ein einziges Mal zum initialen Erzeugen der Makefiles explizit ausführen. Die erzeugten Makefiles enthalten dann Regeln, um Cmake erneut aufzurufen, wenn sich eine der »CMakeLists.txt« geändert hat.

Übliche Ausgaben wie etwa "Checking for working C Compiler" fehlen, denn die Ergebnisse dieser Tests hat Cmake in einer Cachedatei namens »CMakeCache.txt« gespeichert. Bei wiederholten Aufrufen verwendet Cmake die Werte aus dem Cache, außer wenn der Eintrag den String »NOTFOUND« enthält. Dann führt Cmake den Test erneut durch. »CMakeCache.txt« speichert auch das Quelltextverzeichnis und das Buildverzeichnis sowie den verwendeten Generator, also beispielsweise »Unix Makefiles« oder »KDevelop3«.

Wer von Makefiles auf Kdevelop-Projekte umsteigen möchte, muss entweder ein neues Buildverzeichnis anlegen oder die »CMakeCache.txt« löschen, da Cmake sonst deren Einstellungen erneut verwenden würde. Wie erwähnt legt die Cmake-Variable »CMAKE_INSTALL_PREFIX« das Standardinstallationsverzeichnis »/usr/local« fest. Auch ihren Wert konserviert »CMakeCache.txt«. Um die Software in ein anderes Verzeichnis als »/usr/local« zu installieren, können Entwickler den Wert von »CMAKE_INSTALL_PREFIX« aber auf unterschiedliche Weisen anpassen:

  • Über »ccmake ~/src/myproj« (Abbildung 4).
  • Indem sie den Wert auf der Kommandozeile setzen, und zwar: »cmake ~/src/myproj/ -DCMAKE_INSTALL_PREFIX:PATH=/usr«.
  • Durch direktes Editieren der Datei »CMakeCache.txt«.

Auf diese Art und Weise lassen sich alle Cachevariablen beliebig modifizieren.


Abbildung 4: Das Curses-Interface »ccmake« beim Editieren der Cachevariablen. Mit dem Frontend lässt sich bequem die Cmake-Projektkonfiguration verändern.

Externe Bibliotheken

Die bisherigen Beispielen haben zwar Programme und Bibliotheken erzeugt, aber keine externen Libraries benutzt, was in nicht trivialen Projekten aber immer notwendig ist. Eine Grafiksoftware zum Beispiel, die mit Jpeg-Bildern arbeitet, verwendet normalerweise die Jpeg-Library und die entsprechenden Jpeg-Header, die sich auf verschiedenen Systemen oft in unterschiedlichen Verzeichnissen befinden.

Bei Linux-Installationen liegen die Header der Jpeg-Library wie »jpeglib.h« typischerweise in »/usr/include«, also in einem der Standard-Include-Verzeichnisse des Compilers. Auf anderen Systemen wie Mac OS X, HP/UX oder Windows finden sich der Header und die Bibliothek meist an einer anderen Stelle. Cmake trägt diesem Umstand durch den Einsatz des »find_package()«-Befehls Rechnung:

find_package(JPEG REQUIRED)
include_directories(${JPEG_INCLUDE_DIR})
add_executable(jpegviewer main.cpp viewer.cpp)
target_link_libraries(jpegviewer ${JPEG_LIBRARIES})

Der Aufruf von »find_package()« veranlasst Cmake dazu, in seinem System-Modulverzeichnis eine Datei namens »FindJPEG.cmake« zu suchen und auszuführen. Für jedes Paket, das zum Projekt gehört, muss eine solche Datei »FindPaket.cmake« existieren.

Alle diese Dateien gehorchen dem gleichen Schema: Sie versuchen die zur Benutzung der Library nötigen Dateien im System zu finden und setzen eine Reihe von Variablen, die dann die Ergebnisse enthalten. Meist sind das eine Variable für die Include-Verzeichnisse und eine für die Libraries. Die Namensgebung folgt einem konsistenten Schema wie zum Beispiel »JPEG_INCLUDE_DIR« (alternativ »FOO_INCLUDES«) und »JPEG_LIBRARIES« (alternativ »FOO_LIB« und »FOO_LIBS«). Listing 6 zeigt die Datei »FindJPEG.cmake«.

Listing 6: »FindJPEG.cmake«
01 # - Find JPEG
02 # Find the native JPEG includes and library
03 # This module defines
04 #  JPEG_INCLUDE_DIR, where to find jpeglib.h, etc.
05 #  JPEG_LIBRARIES, the libraries needed to use JPEG.
06 #  JPEG_FOUND, If false, do not try to use JPEG.
07 # also defined, but not for general use are
08 #  JPEG_LIBRARY, where to find the JPEG library.
09 
10 FIND_PATH(JPEG_INCLUDE_DIR jpeglib.h)
11 
12 FIND_LIBRARY(JPEG_LIBRARIES NAMES jpeg)
13 
14 IF (JPEG_LIBRARIES AND JPEG_INCLUDE_DIR)
15   SET(JPEG_FOUND "YES")
16 ELSE (JPEG_LIBRARIES AND JPEG_INCLUDE_DIR)
17   SET(JPEG_FOUND "NO")
18 ENDIF (JPEG_LIBRARIES AND JPEG_INCLUDE_DIR)
19 
20 IF (JPEG_FOUND)
21    IF (NOT JPEG_FIND_QUIETLY)
22       MESSAGE(STATUS "Found JPEG: ${JPEG_LIBRARIES}")
23    ENDIF (NOT JPEG_FIND_QUIETLY)
24 ELSE (JPEG_FOUND)
25    IF (JPEG_FIND_REQUIRED)
26       MESSAGE(FATAL_ERROR "Could not find JPEG library")
27    ENDIF (JPEG_FIND_REQUIRED)
28 ENDIF (JPEG_FOUND)
29 
30 MARK_AS_ADVANCED(JPEG_LIBRARIES JPEG_INCLUDE_DIR)
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
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
Optimierung mit Profil System-Profiling mit Oprofile
Whitepaper
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele

Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
The Role of Open Source in Data Integration

Obwohl in den letzten Jahren viele technische Fortschritte erzielt werden konnten, verfügen die meisten Datenintegrationsprozesse nach wie vor nur über eine sehr begrenzte Automatisierung. Das vorliegende White Paper von dem Industry Analyst Mark Madson wird zunächst ein grundlegendes Verständnis von Daten Integration vermitteln, die Vorzüge von Open Source Lösungen für Daten Integration erläutern und Ihnen professionelle Empfehlungen geben, damit Sie Ihre Integrationsjobs noch einfacher und produktiver gestalten können.

Download PDF (Registrierung erforderlich)
Kommentare (0)