Эти два файла в основном рассматриваются в проектах с открытым исходным кодом.
Для чего они нужны и как они работают?
Эти два файла в основном рассматриваются в проектах с открытым исходным кодом.
Для чего они нужны и как они работают?
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 и т.д.
Простой пример
Бесстыдно адаптирован из 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/binREADME.md to /usr/local/share/doc/automake_hello_worldВ GitHub для вас попробовать.
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