Как собрать библотеку используя
configure, automake, autoconf и прочие «авто-утилиты»

Библиотеки в линукс это файлы с расширением «.so» и файлы с расширением «.a». Файлы с расширением «.so» это динамические библиотеки. Файлы с расширением «.a» это статические библиотеки. Оба этих типа библиотек можно создавать с использованием autotools.

Пример создания маленькой библиотеки с использованием autotools:

1. Создадим директорию для библиотеки test.

2. В директории test создадим директорию lib.

3. В lib создадим файл lib_file1.c

/* lib/lib_file1.c */

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

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

4. В lib создадим файл lib_file2.c

/* lib/lib_file2.c */

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

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

5. В lib создадим файл lib_header1.h

/* lib/lib_header1.h */

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

Для сборки статической или динамической библиотеки можно вручную написать Makefile, а лучше использовать autotools, которые сгенерируют её автоматически.

Для автоматического создания Makefile нужно всего лишь два файла шаблона - Makefile.am и configure.in. Причем первый пишется вручную, а второй генерируется автоматически и правится.

В корневой директории библиотеки (в директории test) создаем файл Makefile.am следующего содержания:

# Makefile.am

ACLOCAL_AMFLAGS = -I m4
SUBDIRS = lib

Ключевое слово SUBDIRS означает, что исходный файлы для сборки находятся в данной директории.

Также нужно создать Makefile.am в директории lib следующего содержания:

#lib/Makefile.am

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

Если нужно подключить дополнительную библиотеку, то следует добавить запись вида:

libhw_la_LIBADD	= -lm 

Всё этого достаточно.

configure.in создадим с помощью утилиты autoscan. Эта программа создает файл configure.scan, который и является прототипом configure.in.

Выполняем:

autoscan

Правим configure.scan и затем переименовывем его в configure.in :

#                                               -*- 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

ВСЁ! Терь выполняем следующую последовательность действий и Makefile готов.

aclocal - создает aclocal.m4.

libtoolize — стандартные средства для включения сервисов (libtool) для сборки библиотек.

autoconf - утилита создает скрипт configure в соответствии с макросами указанными в файле `configure.in'.

autoheader — создает заголовочный файл (config.h.in).

touch NEWS README AUTHORS ChangeLog (эти файлы нужны для automake)

automake --add-missing - программа создает файлы"Makefile.in", на основе файлов "Makefile.am".

configure — создает Makefile

make — собирает библиотеку