Что такое Makefile.am и Makefile.in? - PullRequest
305 голосов
/ 28 марта 2010

Эти два файла чаще всего встречаются в проектах с открытым исходным кодом.

Для чего они и как они работают?

Ответы [ 4 ]

350 голосов
/ 28 марта 2010

Makefile.am - это файл, определенный программистом и используемый automake для генерации файла Makefile.in (.am означает a uto m ake) , Скрипт configure, обычно встречающийся в исходных архивах, будет использовать Makefile.in для генерации Makefile.

Сценарий configure сам генерируется из файла, определенного программистом с именем configure.ac или configure.in (устарело). Я предпочитаю .ac (для a uto c onf), поскольку он отличает его от сгенерированных Makefile.in файлов, и таким образом у меня могут быть такие правила, как make dist-clean, который выполняется rm -f *.in. Поскольку это сгенерированный файл, он, как правило, не хранится в системе редакций, такой как Git, SVN, Mercurial или CVS, а файл .ac будет.

Подробнее о GNU Autotools . Сначала прочитайте о make и Makefile, затем узнайте о automake, autoconf, libtool и т. Д.

43 голосов

Простой пример

Бесстыдно адаптировано из: http://www.gnu.org/software/automake/manual/html_node/Creating-amhello.html и протестировано на Ubuntu 14.04 Automake 1.14.1.

Makefile.am

SUBDIRS = src
dist_doc_DATA = README.md

README.md

Some doc.

configure.ac

AC_INIT([automake_hello_world], [1.0], [bug-automake@gnu.org])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([
 Makefile
 src/Makefile
])
AC_OUTPUT

ЦСИ / Makefile.am

bin_PROGRAMS = autotools_hello_world
autotools_hello_world_SOURCES = main.c

ЦСИ / main.c

#include <config.h>
#include <stdio.h>

int main (void) {
  puts ("Hello world from " PACKAGE_STRING);
  return 0;
}

Использование

autoreconf --install
mkdir build
cd build
../configure
make
sudo make install
autoconf_hello_world
sudo make uninstall

Это выводит:

Hello world from automake_hello_world 1.0

Примечания

  • autoreconf --install генерирует несколько файлов шаблонов, которые должны отслеживаться Git, включая Makefile.in. Его нужно запускать только в первый раз.

  • make install установок:

    • двоичный файл до /usr/local/bin
    • README.md до /usr/local/share/doc/automake_hello_world

На GitHub для вас, чтобы попробовать его.

14 голосов
/ 07 июля 2015

ссылка :

Makefile.am - файл пользовательского ввода для автоматизации

configure.in - файл пользовательского ввода для autoconf


autoconf создает файл configure из файла configure.in

automake создает файл Makefile.in из файла Makefile.am

configure генерирует Makefile из Makefile.in

Например:

$]
configure.in Makefile.in
$] sudo autoconf
configure configure.in Makefile.in ... 
$] sudo ./configure
Makefile Makefile.in
10 голосов
/ 12 февраля 2018

Разработчик запускает эти:

1) autoconf - создает отправляемый сценарий configure (который установщик запустит для создания Makefile )
2) automake - создает отправляемый Makefile.in (который configure позже прочитает для создания Makefile )

INSTALLER запускает эти:

./configure       # Creates  Makefile        (from     Makefile.in).  
make              # Creates  the application (from the Makefile just created).  

sudo make install # Installs the application 
                  #   Often, by default its files are installed into /usr/local

ВХОДЫ -> ПРОГРАММЫ -> ВЫХОДЫ:

DEVELOPER запускает эти:

configure.in -> autoconf -> configure (script) --- (настройка. в устарела. Теперь используйте configure.ac)
configure.ac -> autoconf -> configure (script) --- (*. ac = a uto c onf)

Makefile.am -> automake -> Makefile.in ----------- (*. am = a uto м ака)

INSTALLER запускает эти команды:

Makefile.in -> configure -> Makefile (*. in = in put file)

Makefile -> make -> (новое программное обеспечение в вашем загрузочном или временном каталоге)
Makefile -> make install -> (помещает новое программное обеспечение в системный каталог)


" Autoconf - это расширяемый пакет макросов M4, которые создают сценарии оболочки для автоматической настройки пакетов исходного кода программного обеспечения. Эти сценарии могут адаптировать пакеты для многих типов UNIX-подобных систем без ручного вмешательства пользователя. Autoconf создает сценарий конфигурации для пакета из файла шаблона, в котором перечислены функции операционной системы, которые пакет может использовать, в виде вызовов макросов M4. "

" Automake - это инструмент для автоматической генерации файлов Makefile.in, соответствующих стандартам кодирования GNU. Automake требует использования Autoconf."

Руководства:


Интересные факты:
Основной configure.ac , используемый для сборки LibreOffice, содержит более 12 тыс. Строк кода (но есть также 57 других файлов configure.ac в подпапках).
Исходя из этого, мой сгенерированный configure содержит более 41 тыс. Строк кода.
В то время как Makefile.in и Makefile являются всего лишь 493 строками кода.
(Но в подпапках есть еще 768 других Makefile.in.)

...