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 argcchar** 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_GREENCACA_COLOR_GREEN);
        caca_clear();

        
/* First message */
        caca_set_color(CACA_COLOR_REDCACA_COLOR_BLACK);
        caca_draw_thin_box(11, (width 2), 3);

        int i;
        for (1<= width 2i++) {
            caca_putstr(i2" ");
        }

        charmessage "Hello, World!";
        caca_putstr((width strlen(message)) / 22message);

        
/* Second message */
        caca_set_color(CACA_COLOR_YELLOWCACA_COLOR_BLUE);
        caca_draw_thin_box(35, (width 6), 3);

        for (4<= width 5i++) {
            caca_putstr(i6" ");
        }

        charmessage1 "Press ESC to exit";
        caca_putstr((width strlen(message1)) / 26message1);

        
/* 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.


attachments

imageappend Append an Image
>