Что такое automake

Что такое automake [Вперед] [Вверх] [Назад] [Содержание]
Дальше: Простой пример Вверх: Использование automake Назад: Использование automake

Что такое automake

Automake -- это пакет, предназначенный для автоматической генерации Autoconf- шаблонов Makefile-файлов (по соглашению называющихся Makefile.in) из файлов Automake-шаблонов Makefile.am. Цель утилит Automake -- снять с программиста обязанность писать и поддерживать Makefile-файлы вручную и переложить ее на разработчиков Automake. Так как процесс создания Makefile-файлов обычно проходит по некоторым стандартным правилам, то в большинстве случаев его можно автоматизировать. Например, при добавлении в проект нового файла с исходным текстом нужно:

  • определить зависимости между новым файлом и старыми;
  • определить порядок и правила компиляции для нового файла;
  • включить вновь получаемый объектный модуль в список объектных модулей, необходимых для сборки программы, и т.д.

Кроме того, среди разработчиков свободно распространяемого ПО существуют фактические стандарты на способы организации исходных текстов и работы с ними. Automake также позволяет избавить разработчика от необходимости все время убеждаться в соответствии своего кода общепринятым стандартам.

Обычно содержание файлов Makefile.am -- смесь макроопределений и непосредственно кода, который затем попадает в Makefile.in и далее в Makefile. Фактически это тот же самый Makefile-файл, но на очень высоком уровне -- указывается только, из чего состоит программа и, может быть, некоторые дополнительные параметры, значения которых не могут быть определены автоматически. Все остальные заботы по определению зависимостей между частями кода, установка правильных значений переменных в Makefile.in, определение порядка компиляции, директорий, в которые будет проводиться установка программ и т.п. возлагаются на Automake, точнее, на совместно используемые Autoconf/Automake. Использование Automake предполагает использование Autoconf (обратное неверно).

При чтении программой automake файла Makefile.am некоторые макросы и цели указывают на то, что необходимо сгенерировать какой-либо код, а остальное содержимое просто копируется. Это позволяет включать в Makefile.in произвольный код, который по каким-либо причинам не может быть создан автоматически. Существует правило, гласящее, что цель (target) и макрос в Makefile.am, объявленные пользователем, имеют больший приоритет, чем создаваемые автоматически, т.е. замещают их.

Для простоты будем предполагать, что проект содержит единственный файл configure.in в корневой доректории, а каждая директория, содержащая исходный текст, содержит Makefile.am (именно так и организована большая часть проектов незапредельного размера). Вообще же Automake поддерживает три способа организации исходных текстов:

  • flat (``плоский'') -- все исходные тексты располагаются в одной директории;
  • shallow (``мелкий'') -- наиболее важные части исходных текстов располагаются в одной директории, а вспомогательные (например, какие-либо дополнительные библиотеки) расположены в поддиректориях;
  • deep (``глубокий'') -- все исходные тексты расположены в поддиректориях, а корневая директория проекта содержит в основном информацию для конфигурации;

Файл configure.in требуется для получения некоторой информации об исходных текстах. Кроме того, специальные Autoconf-макросы требуются для того, чтобы ``сообщить'' скрипту configure о том, что используется Automake. Эти макросы автоматически помещаются в файл aclocal.m4 при запуске программы aclocal.



Dmitry A. Antipov
1999-05-26