Проект

Давайте теперь подготовим нашу библиотеку для распространения.

Создадим новый каталог проекта libcalculate. В нём – каталог lib. В него поместим файлы calculate.c, calculate.h из предыдущего проекта. Только теперь, поскольку мы будем использовать autoheader, мы снова должны включить в оба файла строки:

#ifdef HAVE_CONFIG_H

#include <config.h>

#endif

Создадим в корневом каталоге проекта файл configure.ac

AC_INIT(lib/calculate.c)

AM_CONFIG_HEADER(lib/config.h)

AM_INIT_AUTOMAKE(libcalculate,0.1)

AC_PROG_LIBTOOL

AC_PROG_CC

AC_PROG_CXX

AC_PROG_INSTALL

AC_OUTPUT(Makefile lib/Makefile)

В нём имеется незнакомая ранее директива AC_PROG_LIBTOOL. Она означает, что компиляция будет производиться с использованием утилиты libtool.

Здесь же – файл Makefile.am

SUBDIRS = lib

В каталоге lib – другой файл Makefile.am

lib_LTLIBRARIES=libcalculate.la

libcalculate_la_SOURCES=calculate.h calculate.c

libcalculate_la_LIBADD=-lm

Если вы вспомните, как выглядел аналогичный файл в проекте исполняемой программы, то разница очевидна. Вместо bin_XXX пишем lib_XXX. Вместо XXX_LDADD пишем XXX_LIBADD.

Собираем библиотеку.

aclocal

libtoolize

autoconf

touch NEWS AUTHORS README ChangeLog

autoheader

automake -a

./configure

make

Устанавливаем её в системе.

su

make install

exit

Посмотрите внимательно на каталог /usr/local/lib. Там появились файлы библиотеки: a-файл, предназначенный для связывания с исполняемыми программами, и so-файлы, предназначенные для динамической загрузки. Все библиотеки, устанавливаемые пользователем, должны располагаться именно здесь, а в каталоге /usr/lib должны помещаться только библиотеки, входящие в дистрибутив Linux, за стабильность которых отвечают разработчики дистрибутива.

Да, и ещё обязательно не забудьте про переменную LD_LIBRARY_PATH.

Теперь создадим исполняемую программу. Пока для краткости не будем пользоваться инструментами для распространения.

Найдём наш файл main.c и сделаем из него запускаемую программу.

gcc main.c -o kalkul -lcalculate

Здесь должно быть вам всё знакомо. Параметр -lcalculate подключает к исполняемому файлу библиотеку libcalculate, которую найдёт по стандартному адресу /usr/local/lib.

Запустим его

./kalkul

Давайте теперь подготовим к распространению эту программу. Но теперь добавим в неё одну «фишку», которую до сих пор не делали ни разу – страницу помощи. Вы уже знаете, как пользоваться страницами man, можете, если что-то непонятно, набрать, например, man gcc. Давайте и наших пользователей не лишим такой возможности, обеспечим хоть мизерным, но руководством.

Страницы помощи для программ, поставляемых с дистрибутивом,находятся в каталоге /usr/share/man. Если вы заглянете туда, то увидите, что там находятся многие вложенные каталоги с такими названиями, как fr, de, ru, ar, es, man1, man2, man3 и так далее. Что же в них находится?

Каталоги fr, de, ru, ar, es и другие подобные предназначены для страниц помощи локализованных версий программ (французских, немецких, русских, арабских, испанских). А man1, man2, man3, man4 и т. д. просто предназначены для разделения страниц помощи по тематике, чтобы они не были свалены в одну кучу, так как их количество обычно очень велико. Такое разделение стандартно для всех UNIX-подобных систем.

man1 содержит описание программ, доступных всем пользователям системы.

man2 – функций системы, которые программисты могут использовать в своих программах.

man3 – функций различных библиотек, а также функций языков программирования, отличных от C.

man4 – описания устройств.

man5 – описания конфигурационных файлов.

man6 – описания игр.

man7 – разное.

man8 – описания программ, доступных администратору системы.

man9 – в Linux не используется.

Программы, полученные из интернета или из других «левых» источников, естественно, должны располагаться в другом каталоге, чтобы не перемешиваться со страницами, полученными из дистрибутива Linux. Таким каталогом является /usr/local/man. Туда мы и будем устанавливать страницу помощи к нашей программе.

Создайте новый каталог проекта kalkul3. В нём – каталог src. В каталог src поместите файлы main.c и calculate.h. Проследите, чтобы у обоих были добавлены строки:

#ifdef HAVE_CONFIG_H

#include <config.h>

#endif

Теперь туда же добавьте файл kalkul.1 (его расширение – цифра один) – это и есть страница помощи. Единица в качестве расширения файла означает,что он будет установлен в каталог man1.

Файл kalkul.1

.TH KALKUL 1 "27 August 2006" "Программирование в Linux"

.SH НАЗВАНИЕ

kalkul \- Простейший демонстрационный калькулятор

.SH ОПЦИИ И ФЛАГИ

нет.

.SH ОПИСАНИЕ

Позволяет производить простейшие математические действия над числами: сложение, вычитание, умножение, деление, возводить в степень, извлечение квадратного корня,нахождение синуса, косинуса и тангенса.

.SH РУКОВОДСТВО ПО ИСПОЛЬЗОВАНИЮ

Программа вызывается командой kalkul. После её вызова требуется ввести в консоли первое число, над которым надо произвести действие. Затем указать действие. Если оно производится только над одним числом, то сразу будет выведен результат. Если потребуется второе число, то программа потребует его ввода.

.SH обозначения математических действий

.IP "+"

сложение

.IP "-"

вычитание

.IP "*"-

умножение

.IP "/"

деление; если делитель равен нулю, появится сообщение об ошибке

.IP "pow"

возведение в степень

.IP "sqrt"

извлечение квадратного корня

.IP "sin"

синус

.IP "cos"

косинус

.IP "tan"

тангенс

.SH АВТОРЫ

Д. А. Пантелеичев,2006.

ВНИМАНИЕ! Этот файл должен быть сохранён в кодировке koi8-r. В противном случае русские буквы не будут отображаться корректно. Будьте особенно внимательны! Большинство редакторов из стандартных поставок дистрибутивов Linux по умолчанию сохраняют файлы в кодировке utf-8, однако консоль продолжает работать в koi8-r. Поэтому вам придётся изменить кодировку!

Файл configure.ac в корневом каталоге проекта:

AC_INIT(src/main.c)

AM_CONFIG_HEADER(src/config.h)

AM_INIT_AUTOMAKE(kalkul,0.1)

AC_PROG_CC

AC_PROG_CXX

AC_PROG_INSTALL

AC_OUTPUT(Makefile src/Makefile)

Файл Makefile.am в корневом каталоге проекта

SUBDIRS = src

Файл Makefile.am в каталоге src.

bin_PROGRAMS=kalkul

kalkul_SOURCES=calculate.h main.c

man_MANS=kalkul.1

kalkul_LDADD=-lcalculate

Мы добавили в него строку man_MANS=kalkul.1

Собираем программу.

aclocal

autoconf

touch NEWS README AUTHORS ChangeLog

autoheader

automake -a

./configure

make

Инсталлируем.

su

make install

exit

Обратите внимание: в каталоге /usr/local/man/man1 появился файл kalkul.1. Если мы захотим посмотреть страницу помощи программы,это можно сделать так:

man kalkul