В каталоге, содержащем исходные тексты, из которых будет построена
программа (в отличие от библиотеки), в основном используется
макрос `PROGRAMS'. Программы могут быть установлены в каталоги
bindir, sbindir, libexecdir, pkglibdir, или же
вообще не устанавливаться (`noinst').
Например:
bin_PROGRAMS = hello
В этом простом примере результирующий `Makefile.in' будет
содержать код для генерации программы с именем hello. Переменная
hello_SOURCES используется для указания того, какие файлы
исходных текстов будут использованы для компиляции исполняемого файла:
hello_SOURCES = hello.c version.c getopt.c getopt1.c getopt.h system.h
В результате этого каждый упомянутый в этой переменной файл `.c' будет скомпилирован в соответствующий файл `.o'. Затем все они компонуются для создания `hello'.
Если переменная `prog_SOURCES' необходима, но не указана, то она получает значение по умолчанию, равное единственному файлу `prog.c'.
В одном каталоге могут компилироваться несколько программ. Эти программы могут совместно использовать один и тот же исходный файл, который должен быть указан в каждом определении `_SOURCES'.
Заголовочные файлы, перечисленные в определении `_SOURCES', включаются в дистрибутив, а в других случаях игнорируются. В том случае, если это не очень удобно, вы не должны включать файл, созданный `configure' в переменную `_SOURCES'; этот файл не должен распространяться. Файлы Lex (`.l') и Yacc (`.y') также должны быть перечислены; смотрите раздел section Поддержка Yacc и Lex.
Automake должен знать все файлы исходных текстов, которые могут
участвовать в компиляции программы, даже если не все файлы будут
использоваться в каждом конкретном случае. Файлы, которые компилируются
только при выполнении определенных условий, должны быть перечислены в
соответствующей переменной `EXTRA_'. Например, если
`hello-linux.c' будет, в зависимости от условий, включен в
программу hello, то файл `Makefile.am' должен содержать:
EXTRA_hello_SOURCES = hello-linux.c
Иногда также полезно аналогичным образом определить во время
конфигурации, какие программы будут скомпилированы. Например, GNU cpio
создает программы mt и rmt только при выполнении определенных
условий.
В этом случае вы должны уведомить Automake обо всех программах, которые
могут быть построены, но в то же время заставить сгенерированный файл
`Makefile.in' использовать программы, заданные при выполнении
configure. Это делается подстановкой значений при выполнении
configure в каждом определении `_PROGRAMS'. А все
программы, которые можно создать, перечисляются в переменной
EXTRA_PROGRAMS.
Если вы хотите скомпоновать программу с библиотеками, которые не найдены
configure, то для этого вы должны использовать переменную
LDADD. Эта переменная может использоваться для добавления ключей
в командную строку компоновщика.
Иногда несколько программ компилируются в одном каталоге, но при этом у
них различные требования к компоновке. В этом случае для
переопределения глобальной переменной LDADD вы можете
использовать переменную `prog_LDADD' (где prog является
именем программы, как оно появляется в некоторых переменных
`_PROGRAMS', и обычно записывается буквами в нижнем регистре). Если
эта переменная существует для заданной программы, то программа
компонуется без использования LDADD.
Например, в GNU cpio, pax, cpio и mt компонуются с
библиотекой `libcpio.a'. Однако, программа rmt, создаваемая в том же
каталоге, не имеет такого требования к компоновке. Более того, программы
mt и rmt создаются только на определенных типах машин. Вот
как выглядит `src/Makefile.am' из поставки cpio (в сокращенном
виде):
bin_PROGRAMS = cpio pax @MT@ libexec_PROGRAMS = @RMT@ EXTRA_PROGRAMS = mt rmt LDADD = ../lib/libcpio.a @INTLLIBS@ rmt_LDADD = cpio_SOURCES = ... pax_SOURCES = ... mt_SOURCES = ... rmt_SOURCES = ...
`prog_LDADD' не подходит для передачи специфических для программы флагов компоновщика (за исключением `-l' и `-L'). Для передачи таких флагов используйте переменную `prog_LDFLAGS'.
Также иногда полезно собирать программу, в зависимости от цели, которая не является частью этой программы. Это может быть сделано с использованием переменной `prog_DEPENDENCIES'. Каждая программа зависит от содержимого такой переменной, но никакой дополнительной интерпретации не производится.
Если переменная `prog_DEPENDENCIES' не определена, то она будет вычислена Automake. Автоматически присвоенная ей величина является содержимым переменной `prog_LDADD' с большинством подстановок `configure'. Ключи `-l' и `-L' удаляются. Остающимися подстановками `configure' являются только `@LIBOBJS@' и `@ALLOCA@'; они остаются потому, что они заведомо не приведут к генерации неправильных значений для `prog_DEPENDENCIES'.
Go to the first, previous, next, last section, table of contents.