Câu trả lời:
Makefile.am
là một tập tin lập trình viên xác định và được sử dụng bởi automake
để tạo ra các Makefile.in
tập tin ( .am
viết tắt cho một Uto m ake). Các configure
kịch bản thường thấy trong tarball nguồn sẽ sử dụng Makefile.in
để tạo ra một Makefile
.
Bản thân configure
tập lệnh được tạo từ một tệp do lập trình viên xác định có tên configure.ac
hoặc configure.in
(không dùng nữa). Tôi thích .ac
(đối với một uto c onf) vì nó phân biệt nó với các Makefile.in
tệp được tạo và theo cách đó tôi có thể có các quy tắc như make dist-clean
chạy rm -f *.in
. Vì nó là một tệp được tạo, nên nó thường không được lưu trữ trong một hệ thống sửa đổi, chẳng hạn như Git, SVN, Mercurial hoặc CVS, thay vào đó là .ac
tệp.
Đọc thêm về GNU Autotools . Tìm hiểu về make
và Makefile
lần đầu tiên, sau đó tìm hiểu về automake
, autoconf
, libtool
vv
.in
phương tiện mở rộng mà nó đầu vào cho configure
đến xoa bóp, không phải là một tập tin cuối cùng mà nên được sử dụng (ví dụ với make
). Nếu bạn tò mò về lý do tại sao điều này có vẻ "nực cười" phức tạp, hãy thử đọc: stackoverflow.com/a/26832773/939557 Những ngày này với GitHub, v.v. nguồn trực tiếp từ công cụ kiểm soát mã nguồn, thay vì sử dụng tarball phân phối nguồn được tạo bởi các nhà bảo trì.
Ví dụ đơn giản
Thích nghi một cách đáng xấu hổ từ: http://www.gnu.org/software/automake/manual/html_node/Creating-amhello.html và thử nghiệm trên 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;
}
Sử dụng
autoreconf --install
mkdir build
cd build
../configure
make
sudo make install
autoconf_hello_world
sudo make uninstall
Kết quả này:
Hello world from automake_hello_world 1.0
Ghi chú
autoreconf --install
tạo một số tệp mẫu cần được theo dõi bởi Git, bao gồm Makefile.in
. Nó chỉ cần được chạy lần đầu tiên.
make install
cài đặt:
/usr/local/bin
README.md
đến /usr/local/share/doc/automake_hello_world
Trên GitHub để bạn dùng thử.
autoconf
và automake
:1) autoconf - tạo tập lệnh cấu hình có thể chuyển đổi
(mà trình cài đặt sau này sẽ chạy để tạo Makefile )
2) automake - tạo tệp dữ liệu Makefile.in có thể thay đổi
( cấu hình này sẽ đọc sau này để tạo Makefile )
configure
, make
và 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
Ký hiệu bên dưới đại khái là: đầu vào -> chương trình -> đầu ra
DEVELOPER chạy sau đây:
configure.ac -> autoconf -> configure (script) --- (*. ac = a uto c onf)
configure.in -> autoconf -> configure (script) --- ( configure.in
depreciated. Sử dụng configure.ac)
Makefile.am -> automake -> Makefile.in ----------- (*. Am = a uto m ake)
INSTALLER chạy các:
Makefile.in -> configure -> Makefile (. * Trong = trong tập tin đặt)
Makefile -> make ----------> (đặt phần mềm mới vào phần tải xuống hoặc thư mục tạm thời của bạn)
Makefile -> make install -> (đặt phần mềm mới vào thư mục hệ thống)
" Autoconf là một gói phần mềm mở rộng của macro M4 sản xuất kịch bản shell với các gói mã nguồn phần mềm tự động cấu hình. Những kịch bản có thể thích ứng với các gói với nhiều loại UNIX-như hệ thống mà không cần hướng dẫn sử dụng can thiệp. Autoconf tạo ra một kịch bản cấu hình cho một gói từ một tệp mẫu liệt kê các tính năng của hệ điều hành mà gói có thể sử dụng, dưới dạng các cuộc gọi macro M4. "
" automake là một công cụ để tự động tạo các tệp Makefile.in tuân thủ Tiêu chuẩn mã hóa GNU. Automake yêu cầu sử dụng Autoconf."
Hướng dẫn sử dụng:
Hướng dẫn trực tuyến miễn phí:
Các chính configure.ac dùng để xây dựng LibreOffice là hơn 12k dòng mã, (nhưng cũng có 57 file configure.ac khác trong thư mục con).
Từ đây, cấu hình được tạo của tôi là hơn 41k dòng mã.
Và trong khi Makefile.in và Makefile đều chỉ có 493 dòng mã. (Nhưng, cũng có thêm 768 Makefile.in trong các thư mục con.)
Makefile.am - một tệp đầu vào của người dùng để tự động
configure.in - một tệp đầu vào của người dùng vào autoconf
autoconf tạo configure từ configure.in
tự động điều chỉnh Makefile.in từ Makefile.am
cấu hình tạo Makefile từ Makefile.in
Ví dụ:
$]
configure.in Makefile.in
$] sudo autoconf
configure configure.in Makefile.in ...
$] sudo ./configure
Makefile Makefile.in
.in
cho cái gì?