Как собрать библотеку используя
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 — собирает библиотеку


