Respostas:
Makefile.amé um arquivo definido pelo programador e é usado automakepara gerar o Makefile.inarquivo (o que .amsignifica um uto m ake). O configurescript normalmente visto em tarballs de origem usará o Makefile.inpara gerar a Makefile.
O configurescript em si é gerado a partir de um arquivo definido pelo programador chamado configure.acou configure.in(obsoleto). Eu prefiro .ac(para um uto c onf), pois o diferencia dos Makefile.inarquivos gerados e, dessa forma, posso ter regras como a make dist-cleanque é 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 .acarquivo seria.
Leia mais sobre o GNU Autotools . Leia sobre makee Makefileem primeiro lugar, em seguida, aprender sobre automake, autoconf, libtool, etc.
.inextensão significa que é uma entrada para configuremassagear, 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 --installgera 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/binREADME.md para /usr/local/share/doc/automake_hello_worldNo GitHub, você pode experimentar.
autoconfe 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, makee 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.indepreciado. 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
.insignifica?