Dieser Artikel ist Bestandteil der Serie Build Systeme, in welcher verschiedene Systeme zum Softwarebau
gegenüber gestellt werden. Um zum übergeordneten Artikel zu gelangen,
klicken Sie bitte hier.
Das Testprogramm
Alle Build Systeme sollen anhand desselben Beispiels untersucht
werden. Es handelt sich um ein einfaches C-Programm, das neben der
Standard C-Blbiothek noch libcaca braucht, um compiliert und gelinkt zu
werden. Somit wird verhindert, dass ein einfache Aufruf von gcc ohne
weitere Parameter genügt. libcaca ist eine einfache Ascii
Art-Bibliothek mit wenig Systemanforderungen. Sie wurde gewählt, da sie
relativ kompakt ist und eine einfache API besitzt, welche das
Testprogramm nicht unnötig verkompliziert.
Datei build_test.c
|
---|
/* * build_test.c * Copyright 2009 Dennis Schulmeister <dennis()ncc-1701a.homelinux.net> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */
/* libc standard */ #include <string.h>
/* Non-standard library */ #include "caca0.h" /* libcaca-dev */
int main(int argc, char** argv) { /* Set up a display to draw upon */ if (caca_init()) { return 1; }
/* Draw something */ { int width = caca_get_width(); int height = caca_get_height();
/* Background */ caca_set_color(CACA_COLOR_GREEN, CACA_COLOR_GREEN); caca_clear();
/* First message */ caca_set_color(CACA_COLOR_RED, CACA_COLOR_BLACK); caca_draw_thin_box(1, 1, (width - 2), 3);
int i; for (i = 1; i <= width - 2; i++) { caca_putstr(i, 2, " "); }
char* message = "Hello, World!"; caca_putstr((width - strlen(message)) / 2, 2, message);
/* Second message */ caca_set_color(CACA_COLOR_YELLOW, CACA_COLOR_BLUE); caca_draw_thin_box(3, 5, (width - 6), 3);
for (i = 4; i <= width - 5; i++) { caca_putstr(i, 6, " "); }
char* message1 = "Press ESC to exit"; caca_putstr((width - strlen(message1)) / 2, 6, message1);
/* Show it */ caca_set_window_title(message1); caca_refresh(); }
/* Wait for ESC key */ { int quit = 0; while (!quit) { int event; while ((event = caca_get_event(CACA_EVENT_KEY_PRESS))) { if ((event & 0xffff) == CACA_KEY_ESCAPE) { quit = 1; } } } }
/* Clean up */ caca_end(); return 0; }
|
Das
Programm zeichnet zwei Boxen mit einem "Hello, World!"-Text und einem
Hinweis, dass das Programm mit ESC beendet werden kann. Da hierfür eine
einfache Polling-Schleife verwendet wird, ist das Warten sehr
CPU-intensiv. Auf eine Verbesserung dessen via usleep() und dergleichen
wird dennoch verzichtet.
In den folgenden Unterkapiteln werden
verschiedene Varianten des Testprogramms verwendet, um auch Situationen
nachzustellen, in denen aus mehreren Quelldateien mehrere Objektdateien
entstehen. Trotz dieser Abweichungen bleibt das Ausgangsprogramm aber
immer das gleich,
Zurück zum übergeordneten Thema Build Systeme.