Respostas:
Makefile.am
é um arquivo definido pelo programador e é usado automake
para gerar o Makefile.in
arquivo (o que .am
significa um uto m ake). O configure
script normalmente visto em tarballs de origem usará o Makefile.in
para gerar a Makefile
.
O configure
script em si é gerado a partir de um arquivo definido pelo programador chamado configure.ac
ou configure.in
(obsoleto). Eu prefiro .ac
(para um uto c onf), pois o diferencia dos Makefile.in
arquivos gerados e, dessa forma, posso ter regras como a make dist-clean
que é executada rm -f *.in
. Como é um arquivo gerado, normalmente não é armazenado em um sistema de revisão como Git, SVN, Mercurial ou CVS, mas o .ac
arquivo seria.
Leia mais sobre o GNU Autotools . Leia sobre make
e Makefile
em primeiro lugar, em seguida, aprender sobre automake
, autoconf
, libtool
, etc.
.in
extensão significa que é uma entrada para configure
massagear, não um arquivo final que deve ser usado (por exemplo, com make
). Se você está curioso para saber por que isso parece "ridiculamente" complicado, tente ler: stackoverflow.com/a/26832773/939557 Atualmente, com o GitHub, etc., tornando-se um canal de distribuição comum, algumas das suposições do autoconf estão quebrando: as pessoas estão obtendo a fonte diretamente da ferramenta de controle do código-fonte, em vez de usar um tarball de distribuição de origem criado pelos mantenedores.
Exemplo simples
Adaptado descaradamente de: http://www.gnu.org/software/automake/manual/html_node/Creating-amhello.html e testado no 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
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;
}
Uso
autoreconf --install
mkdir build
cd build
../configure
make
sudo make install
autoconf_hello_world
sudo make uninstall
Isso gera:
Hello world from automake_hello_world 1.0
Notas
autoreconf --install
gera vários arquivos de modelo que devem ser rastreados pelo Git, inclusive Makefile.in
. Ele só precisa ser executado na primeira vez.
make install
instala:
/usr/local/bin
README.md
para /usr/local/share/doc/automake_hello_world
No GitHub, você pode experimentar.
autoconf
e automake
:1) autoconf - cria um script de configuração expedível
(que o instalador executará posteriormente para criar o Makefile )
2) automake - cria o arquivo de dados Makefile.in que pode ser entregue
(o qual configura posteriormente será lido para criar o Makefile )
configure
, make
e sudo make install
:./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
A notação abaixo é mais ou menos: entradas -> programas -> saídas
DEVELOPER executa estes:
configure.ac -> autoconf -> configure (script) --- (*. ac = a uto c onf)
configure.in -> autoconf -> configure (script) --- ( configure.in
depreciado. Use configure.ac)
Makefile.am -> automake -> Makefile.in ----------- (*. Am = a uto m ake)
O INSTALLER executa estes:
Makefile.in -> Configurar -> Makefile (. * Em = no arquivo de put)
Makefile -> make ----------> (coloca um novo software em seus downloads ou diretório temporário)
Makefile -> make install -> (coloca um novo software nos diretórios do sistema)
" autoconf é um pacote extensível de macros M4 que produzem scripts shell para configurar automaticamente pacotes de código-fonte de software. Esses scripts podem adaptar os pacotes a vários tipos de sistemas UNIX sem intervenção manual do usuário. O Autoconf cria um script de configuração para um pacote a partir de um arquivo de modelo que lista os recursos do sistema operacional que o pacote pode usar, na forma de chamadas de macro M4. "
" automake é uma ferramenta para gerar automaticamente arquivos Makefile.in em conformidade com os Padrões de Codificação GNU. Automake requer o uso do Autoconf."
Manuais:
Tutoriais online gratuitos:
O principal configure.ac usado para compilar o LibreOffice tem mais de 12k linhas de código (mas também existem 57 outros arquivos configure.ac em subpastas.)
A partir disso, o meu configure gerado tem mais de 41k linhas de código.
E enquanto o Makefile.in e o Makefile são apenas 493 linhas de código. (Mas também existem 768 outros Makefile.in em subpastas.)
Makefile.am - um arquivo de entrada do usuário para automatizar
configure.in - um arquivo de entrada do usuário para autoconf
O autoconf gera o configure a partir do configure.in
automake gera o Makefile.in de Makefile.am
configure gera Makefile a partir de Makefile.in
Por exemplo:
$]
configure.in Makefile.in
$] sudo autoconf
configure configure.in Makefile.in ...
$] sudo ./configure
Makefile Makefile.in
.in
significa?