Что такое Makefile.am и Makefile.in?

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

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

Ответ 1

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

configure script сам генерируется из файла, определенного программистом с именем 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 и т.д.

Ответ 2

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

Бесстыдно адаптирован из 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], [[email protected]])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([
 Makefile
 src/Makefile
])
AC_OUTPUT

SRC/Makefile.am

bin_PROGRAMS = autotools_hello_world
autotools_hello_world_SOURCES = main.c

SRC/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 to /usr/local/share/doc/automake_hello_world

В GitHub для вас попробовать.

Ответ 3

ссылка:

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

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


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

automake gererates Makefile.in из Makefile.am

configure создает Makefile из Makefile.in

Для ex:

$]
configure.in Makefile.in
$] sudo autoconf
configure configure.in Makefile.in ... 
$] sudo ./configure
Makefile Makefile.in