Jawaban:
Makefile.amadalah file programmer-didefinisikan dan digunakan oleh automakeuntuk menghasilkan Makefile.inberkas (yang .amberdiri untuk sebuah uto m ake). The configureScript biasanya terlihat di tarball source akan menggunakan Makefile.inuntuk menghasilkan Makefile.
The configureScript itu sendiri dihasilkan dari file programmer-didefinisikan bernama baik configure.acatau configure.in(usang). Saya lebih suka .ac(untuk sebuah uto c onf) karena membedakan dari yang dihasilkan Makefile.infile dan cara yang saya dapat memiliki aturan seperti make dist-cleanyang berjalan rm -f *.in. Karena ini adalah file yang dihasilkan, biasanya tidak disimpan dalam sistem revisi seperti Git, SVN, Mercurial atau CVS, melainkan .acfile tersebut.
Baca lebih lanjut tentang GNU Autotools . Baca tentang makedan Makefilepertama, kemudian belajar tentang automake, autoconf, libtool, dll
.inekstensi berarti bahwa masukan itu untuk configurememijat, bukan file akhir yang harus digunakan (misalnya dengan make). Jika Anda penasaran mengapa ini tampaknya "konyol" rumit, coba baca: stackoverflow.com/a/26832773/939557 Hari-hari ini dengan GitHub, dll. Menjadi saluran distribusi umum yang beberapa asumsi autoconf mogok: orang memperoleh sumber langsung dari alat kontrol kode sumber, daripada menggunakan tarball distribusi sumber yang dibuat oleh pengelola.
Contoh sederhana
Tanpa malu-malu diadaptasi dari: http://www.gnu.org/software/automake/manual/html_node/Creating-amhello.html dan diuji di 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;
}
Pemakaian
autoreconf --install
mkdir build
cd build
../configure
make
sudo make install
autoconf_hello_world
sudo make uninstall
Output ini:
Hello world from automake_hello_world 1.0
Catatan
autoreconf --installmenghasilkan beberapa file templat yang harus dilacak oleh Git, termasuk Makefile.in. Itu hanya perlu dijalankan pertama kali.
make install menginstal:
/usr/local/binREADME.md untuk /usr/local/share/doc/automake_hello_worldDi GitHub, Anda bisa mencobanya.
autoconfdan automake:1) autoconf - membuat konfigurasi shippable skrip
(yang nantinya akan dijalankan oleh pemasang untuk membuat Makefile )
2) automake - membuat file data Makefile.in shippable
(yang mengkonfigurasi nantinya akan dibaca untuk membuat Makefile )
configure, makedan 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
Notasi di bawah ini kira-kira: input -> program -> output
DEVELOPER menjalankan ini:
configure.ac -> autoconf -> configure (script) --- (*. ac = a uto c onf)
configure.in -> autoconf -> configure (script) --- ( configure.indisusutkan Gunakan configure.ac.)
Makefile.am -> automake -> Makefile.in ----------- (*. Am = a uto m ake)
INSTALLER menjalankan ini:
Makefile.in -> configure -> Makefile (*. Di = di put file)
Makefile -> make ----------> (menempatkan perangkat lunak baru di unduhan Anda atau direktori sementara)
Makefile -> make install -> (menempatkan perangkat lunak baru di direktori sistem)
" autoconf adalah paket extensible dari makro M4 yang menghasilkan skrip shell untuk secara otomatis mengkonfigurasi paket kode sumber perangkat lunak. Skrip ini dapat mengadaptasi paket ke berbagai jenis sistem mirip-UNIX tanpa intervensi pengguna manual. Autoconf membuat skrip konfigurasi untuk paket dari sebuah file templat yang mencantumkan fitur sistem operasi yang dapat digunakan paket, dalam bentuk panggilan makro M4. "
" automake adalah alat untuk secara otomatis menghasilkan file Makefile.in yang sesuai dengan Standar Pengkodean GNU. Automake membutuhkan penggunaan Autoconf."
Manual:
Tutorial online gratis:
Configure.ac utama yang digunakan untuk membangun LibreOffice adalah lebih dari 12k baris kode, (tetapi ada juga 57 file configure.ac lainnya dalam subfolder.)
Dari ini konfigurasi yang saya hasilkan adalah lebih dari 41k baris kode.
Dan sementara Makefile.in dan Makefile sama-sama hanya 493 baris kode. (Tapi, ada juga 768 Makefile.in di subfolder lagi.)
Makefile.am - file input pengguna untuk diotomatisasi
configure.in - file input pengguna ke autoconf
autoconf menghasilkan configure dari configure.in
automate gererates Makefile.in dari Makefile.am
configure menghasilkan Makefile dari Makefile.in
Misalnya:
$]
configure.in Makefile.in
$] sudo autoconf
configure configure.in Makefile.in ...
$] sudo ./configure
Makefile Makefile.in
.in?