go to the first, previous, next, last section, table of contents.
общая информацияследующие разделы описывают основные принципы работы automake. общие операцииautomake читает файл `makefile.am' и создает на его основе файл `makefile.in'. специальные макросы и цели, определенные в `makefile.am', заставляют automake генерировать более специализированный код; например, макроопределение `bin_programs' заставит создать цели для компиляции и компоновки программ.
макроопределения и цели из файла `makefile.am' копируются в файл
`makefile.in' без изменений. это позволяет вам добавлять в
генерируемый файл `makefile.in' произвольный код. например,
дистрибутив automake
включает в себя нестандартную цель заметьте, что расширения gnu make не распознаются программой automake. использование таких расширений в файле `makefile.am' приведет к ошибкам или странному поведению. automake пытается сгруппировать комментарии к расположенным по соседству xцелям и макроопределениям.
цель, определенная в `makefile.am', обычно переопределяет любую цель
с таким же именем, которая была бы автоматически создана
аналогичным образом, макрос, определенный в `makefile.am', будет
переопределять любой макрос, который создает
при обработке макроопределения automake рекурсивно обрабатывает
макросы, на которые есть ссылка в данном макроопределении. например,
если automake исследует содержимое xs = a.c b.c foo_sources = c.c $(xs)
то он будет использовать файлы `a.c', `b.c' и `c.c' как
содержимое automake также вводит форму комментария, который не копируется в выходной файл; все строки, начинающиеся с `##', полностью игнорируются automake. очень часто первая строка файла `makefile.am' выглядит следующим образом: ## process this file with automake to produce makefile.in ## для получения makefile.in обработайте этот файл программой automake типы иерархии каталогов пакета
если все файлы пакета располагаются в одном каталоге, то это
плоский пакет. в файле `makefile.am' для этого типа пакета
по определению отсутствует макрос
глубокий пакет -- это такой, в котором все исходные тексты лежат в
подкаталогах; каталог верхнего уровня содержит в основном
конфигурационную информацию. хорошим примером такого пакета является gnu
неглубокий пакет подразумевает, что основные файлы исходных текстов
располагаются в каталоге верхнего уровня, а различные части этого пакета
(обычно библиотеки) находятся в подкаталогах. к пакетам такого типа
относится automake (а также gnu строгостьхотя automake предназначен для использования людьми, сопровождающими пакеты gnu, он также старается приспособиться и к тем, кто хочет использовать automake, но не хочет соблюдать все соглашения gnu. сейчас automake поддерживает три уровня строгости (strictness), задающих, сколь строго automake должен проверять соответствие стандартам. строгость может принимать следующие значения:
для более детальной информации о точном смысле уровня строгости смотрите
section эффект использования ключей единообразная схема наименования
макросы automake (с этого места мы будем ссылаться на них как на
переменные) в общем следуют единообразной схеме именования,
которая позволяет легко понять, как собираются программы (и другие
результирующие объекты), и как они устанавливаются. эта схема также
поддерживает определение того, что должно быть собрано во время выполнения
во время выполнения
различные наборы переменных используются для принятия решения о том, куда
должны быть установлены собранные объекты. эти переменные называются
подобно основным переменным, но имеют префикс, указывающий, какой из
стандартных каталогов должен быть использован в качестве каталогаx для установки.
имена стандартных каталогов определены в стандартах gnu
(see section `directory variables' in the gnu coding standards). automake расширяет это список переменными
для каждой из основных переменных также существует дополнительная
переменная, имя которой образовано добавлением префикса `extra_' к
имени основной переменной. эта переменная используется для перечисления
объектов, которые могут быть собраны, а могут и не собраны в
зависимости от принятого
например, пакет extra_programs = mt rmt bin_programs = cpio pax sbin_programs = @programs@
определение основной переменной без префикса (например, заметьте, что общий суффикс `dir' опускается при создании имен переменных; таким образом, имя переменной записывается как `bin_programs', а не `bindir_programs'. нельзя устанавливать любые типы объектов в любые каталоги. automake будет расценивать такие попытки как ошибку. automake также будет диагностировать очевидные ошибки в именах каталогов.
иногда стандартных каталогов--- даже с расширениями automake---
недостаточно. в частности, иногда полезно для ясности устанавливать
объекты в подкаталог какого-то предопределенного каталога. здесь
automake также позволяет вам расширить список возможных каталогов для
установки. заданный префикс (например, `zar') является
разрешенным, если определена переменная, имеющая такое же имя, но с
суффиксом `dir' (например, например, пока поддержка html не станет частью automake, вы можете использовать такой фрагмент кода для установки документации в формате html: htmldir = $(prefix)/html html_data = automake.php специальный префикс `noinst' показывает, что указанные объекты вообще не должны быть установлены.
специальный префикс `check' показывает, что указанные объекты не
должны быть скомпилированы до тех пор, пока не будет запущена команда вот список возможных основных имен: `programs', `libraries', `lisp', `scripts', `data', `headers', `mans' и `texinfos'. как именуются порожденные переменные
иногда имена переменных в makefile образуются на базе некоторого текста,
заданного пользователем. например, имена программ преобразуются в имена
макросов makefile. automake канонизирует этот текст, так что он не
должен следовать правилам именования макросов makefile. все имена в
имени, за исключением букв, чисел, и подчеркиваний, при создании ссылки
на макрос преобразуются в
подчеркивания . например, если ваша
программа называется go to the first, previous, next, last section, table of contents. |