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

Wo ist die Jpeg-Bibliothek?

Der Kern des Find-Jpeg-Moduls besteht aus den Befehlen »FIND_PATH()« und »FIND_LIBRARY()« in den Zeilen 10 und 12. Außer ihnen bietet Cmake noch »FIND_FILE()« und »FIND_PROGRAM()«. Diese vier Befehle sollen Dateien, Libraries und Programme in systemspezifischen Verzeichnissen finden. Beispielsweise sucht unter Linux der Aufruf »FIND_LIBRARY()« in Zeile 12 unter anderem in den Verzeichnissen »/lib«, »/usr/lib« und »/usr/local/lib«. Das Ergebnis gibt Cmake in der Variablen »JPEG_LIBRARY« zurück.

Der Abschnitt von Zeile 14 bis 19 in Listing 6 setzt die Ergebnisvariable »JPEG_FOUND«. Über sie kann die aufrufende »CMakeLists.txt« testen, ob die Jpeg-Library gefunden wurde, und gegebenenfalls zusätzliche Quelldateien des aktuellen Projekts kompilieren. Da in »CMakeLists.txt« das Schlüsselwort »REQUIRED« steht, bricht das Modul mit einer Fehlermeldung ab, falls die Jpeg-Library fehlt.

Auf unterschiedlichen Systemen besitzen C-Typen häufig verschiedene Größen, Header und weitere Details können sich unterscheiden. Soll Software trotzdem auf all diesen Systemen kompilieren und laufen, müssen diese Punkte vor Beginn des Buildvorgangs getestet werden. Die Listings 7a bis 7d zeigen ein komplettes Beispiel, das die Existenz der Header »stdio.h« und »blub.h« überprüft. Mit den Ergebnissen dieser Tests erzeugt Cmake aus »config.h.in« einen Header »config.h«, der dann die gewünschten Informationen enthält und in den Quelldateien benutzt wird.

Listing 7a: Header-Test in »CMakeLists.txt«
01 include(CheckIncludeFiles)
02 
03 check_include_files(stdio.h HAVE_STDIO_H)
04 check_include_files(blub.h HAVE_BLUB_H)
05 
06 set(V_MAJOR 1)
07 set(V_MINOR 0)
08 set(V_PATCH 2)
09 
10 configure_file(config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
11 
12 include_directories(${CMAKE_CURRENT_BINARY_DIR})
13 add_executable(configtest main.c)
Listing 7b: Header-Vorlage »config.h.in«
01 #cmakedefine HAVE_STDIO_H 1
02 #cmakedefine HAVE_BLUB_H 1
03 #define VERSION_MAJOR ${V_MAJOR}
04 #define VERSION_MINOR ${V_MINOR}
05 #define VERSION_PATCH ${V_PATCH}
Listing 7c: Generierter Header »config.h«
01 #define HAVE_STDIO_H 1
02 /* #undef HAVE_BLUB_H 1 */
03 #define VERSION_MAJOR 1
04 #define VERSION_MINOR 0
05 #define VERSION_PATCH 2
Listing 7d: Benutzung von »config.h«
01 #include <config.h>
02 
03 int main()
04 {
05 #ifdef HAVE_STDIO_H
06    printf("version is %d.%d.%dn", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH);
07 #ifndef HAVE_BLUB_H
08    printf("no blub.h foundn");
09 #endif
10 #endif
11    return 0;
12 }

Namenskonventionen

Zeile 1 von Listing 7a bindet ein Cmake-Modul namens »CheckIncludeFiles« ein. Cmake hängt automatisch die Endung ».cmake« an, die zugehörige Datei heißt also »CheckIncludeFiles.cmake«. Die Datei gehört zur Cmake-Standardinstallation und stellt das Makro »check_include_files()« bereit. Diese Namensgebungskonvention wird überall eingehalten: Der Dateiname wird in Höckerschreibweise (Camel Case) geschrieben, die enthaltenen Funktionen haben den gleichen Namen, allerdings im C-Stil, also jeweils durch Unterstriche verbundene Wörter.

Der Aufruf von »check_include_files()« in Zeile 3 bewirkt, dass Cmake durch das Kompilieren eines kleinen Testprogramms testet, ob der Header »stdio.h« vorhanden ist. Das Ergebnis schreibt es dann in die Variable »HAVE_STDIO_H«. Das Gleiche gilt für den Header »blub.h« in Zeile 4. In den Zeilen 6, 7 und 8 trägt das Skript die dreiteilige Versionsnummer 1.0.2 in entsprechende Variablen ein.

Der Befehl »configure_file()« in Zeile 10 liest die Datei »config.h.in« ein, nimmt Ersetzungen vor und schreibt den modifizierten Inhalt in die Datei »${CMAKE_CURRENT_BINARY_DIR}/config.h«. Die Anweisung »configure_file()« ersetzt alle Cmake-Variablen, also »${V_MAJOR}«, »${V_MINOR}« sowie »${V_PATCH}« durch ihren Wert. Zusätzlich ersetzt das Skript »#cmakedefine« durch »#define«, wenn die entsprechende Variable »TRUE« ist, bei »FALSE« durch ein auskommentiertes »#undef«.

So lassen sich Header erzeugen, die genau die jeweiligen Systemeigenschaften beschreiben und damit die Grundlage für portable Programme bilden. Die Anweisung »check_include_files()« ist natürlich nicht das einzige von Cmake bereitgestellte Makro. Es gibt Makros für viele Zwecke: zum Überprüfen von Variablengrößen oder der Member-Variablen von Strukturen, der Compiler-Optionen und einige andere Zwecke.

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
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
Geistertanz Die Skriptsprache Boo
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)