Эти два файла в основном рассматриваются в проектах с открытым исходным кодом.
Для чего они нужны и как они работают?
Эти два файла в основном рассматриваются в проектах с открытым исходным кодом.
Для чего они нужны и как они работают?
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/bin
README.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