Zusammenstellen einer Bibliothek mithilfe
configure, automake, autoconf und anderer Autotools

Bibliotheken in Linux sind Dateien mit der Endung «.so» und Dateien mit der Endung «.a». Dateien mit der Endung «.so» sind dynamische Bibliotheken. Dateien mit der Endung «a» sind statische Bibliotheken. Beide Arten von Bibliotheken können mittels Autotools erstellt werden.

Hier ist ein Beispiel, wie eine klein Bibliothek mittels Autotools zusammengestellt werden kann:

1. Erstellen wir ein Verzeichnis für die Bibliothek test.

2. Im Verzeichnis test erstellen wir das Verzeichnis lib.

3. Im lib erstellen wir die Datei lib_file1.c

/* lib/lib_file1.c */

#include <stdio.h>
#include "lib_header1.h"

void receive_byte () {
   printf ("Hello, receive_byte\n");
}

4. Im lib erstellen wir die Datei lib_file2.c

/* lib/lib_file2.c */

#include <stdio.h>
#include "lib_header1.h"

void transmit_byte () {
   printf ("Bye, transmit_byte\n");
}

5. Im lib erstellen wir die Datei lib_header1.h

/* lib/lib_header1.h */

void receive_byte (void);
void transmit_byte (void);

Um eine statische oder dynamische Bibliothek zusammenzustellen, kann man Makefile manuell schreiben, und besser wäre Autotools zu nutzen, die das Makefile automatisch generieren werden.

Für ein automatisches Erstellen von Makefile werden nur zwei Textbausteindatei genutzt - Makefile.am und configure.in. Wobei die erste Datei wird manuell geschrieben, und die zweite wird automatisch generiert und übergearbeitet.

Im Root-Verzeichnis der Bibliothek (im Verzeichnis test) erstellen wir die Datei Makefile.am mit dem folgenden Inhalt:

# Makefile.am

ACLOCAL_AMFLAGS = -I m4
SUBDIRS = lib

Das Stichwort SUBDIRS bedeutet, dass die Quelldateien für das Zusammenstellen in diesem Verzeichnis sind.

Es ist auch die Datei Makefile.am im Verzeichnis lib mit dem folgenden Inhalt zu erstellen:

#lib/Makefile.am

lib_LTLIBRARIES	= libhw.la
libhw_la_SOURCES	= lib_file1.c lib_file2.c lib_header1.h

Wenn eine zusätzliche Bibliother anzuschließen ist, ist den folgenden Datensatz hinzuzufügen:

libhw_la_LIBADD	= -lm 

Das wäre alles.

Erstellen wir configure.in mithilfe Autoscan-Utility. Dieses Programm erstellt die Datei configure.scan, die der Prototyp von configure.in ist.

Führen wir aus::

autoscan

Bearbeiten wir configure.scan und dann benennen wir sie in configure.in um:

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.65])
AC_INIT([libhw], [1.0], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([config.h.in])
AC_CONFIG_HEADERS([config.h])

AM_INIT_AUTOMAKE
AC_PROG_LIBTOOL
AC_CONFIG_MACRO_DIR([m4])

# Checks for programs.
AC_PROG_CXX
AC_PROG_AWK
AC_PROG_CC
AC_PROG_CPP
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_RANLIB

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile
                 lib/Makefile])
AC_OUTPUT

DAS WÄRE ALLES! Jetzt führen wir Folgendes aus und Makefile ist bereit.

aclocal erstellt aclocal.m4.

libtoolize — das sind Standard-Tools für die Aktivierung der Dienste (libtool) für das Zusammenfassen einer Bibliothek.

autoconf - dieser Utility erstellt den Skript configure laut Macros, die in der Datei `configure.in' angegeben sind.

autoheader erstellt eine Header-Datei (config.h.in).

touch NEWS README AUTHORS ChangeLog (diese Dateien werden für Automake benötigt)

automake --add-missing - dieses Programm erstellt die Dateien "Makefile.in" auf Basis von den Dateien "Makefile.am".

configure erstellt Makefile

make baut eine Bibliothk