Autoconf và Automake đã được đặt ra để giải quyết vấn đề tiến hóa của Unix.
Khi Unix phát triển theo các hướng khác nhau, các nhà phát triển muốn mã di động có xu hướng viết mã như thế này:
#if RUNNING_ON_BSD
Set things up in the BSD way
#if RUNNING_ON_SYSTEMV
Set things up in the SystemV way
#endif
Khi Unix được chia thành các triển khai khác nhau (BSD, SystemV, nhiều nhánh của nhà cung cấp và sau này là Linux và các hệ thống tương tự Unix khác), điều quan trọng đối với các nhà phát triển muốn viết mã di động để viết mã không phụ thuộc vào một thương hiệu cụ thể của hệ điều hành , nhưng trên các tính năng tiếp xúc với hệ điều hành. Điều này rất quan trọng vì một phiên bản Unix sẽ giới thiệu một tính năng mới, ví dụ như cuộc gọi hệ thống "gửi" và sau đó các hệ điều hành khác sẽ áp dụng nó. Thay vì có một spaghetti mã kiểm tra các nhãn hiệu và phiên bản, các nhà phát triển bắt đầu thăm dò bằng các tính năng, vì vậy mã đã trở thành:
#if HAVE_SEND
Use Send here
#else
Use something else
#endif
Hầu hết các tệp README để biên dịch mã nguồn trong các nhà phát triển nhọn của thập niên 90 để chỉnh sửa tệp config.h và nhận xét rằng các tính năng phù hợp có sẵn trên hệ thống hoặc sẽ gửi các tệp config.h tiêu chuẩn cho từng cấu hình hệ điều hành đã được kiểm tra.
Quá trình này vừa cồng kềnh vừa dễ bị lỗi và đây là cách Autoconf ra đời. Bạn nên nghĩ về Autoconf như một ngôn ngữ được tạo thành từ các lệnh shell với các macro đặc biệt có thể thay thế quá trình chỉnh sửa con người của config.h bằng một công cụ thăm dò hệ điều hành cho chức năng.
Thông thường bạn sẽ viết mã thăm dò của mình trong tệp configure.ac và sau đó chạy lệnh autoconf sẽ biên dịch tệp này thành lệnh cấu hình thực thi mà bạn đã thấy được sử dụng.
Vì vậy, khi bạn chạy, ./configure && make
bạn đã thăm dò các tính năng có sẵn trên hệ thống của mình và sau đó xây dựng chương trình thực thi với cấu hình được phát hiện.
Khi các dự án nguồn mở bắt đầu sử dụng các hệ thống kiểm soát mã nguồn, việc kiểm tra tệp configure.ac, nhưng không phải là kết quả của quá trình biên dịch (configure). Autogen.sh chỉ là một tập lệnh nhỏ gọi trình biên dịch autoconf với các đối số lệnh đúng cho bạn.
-
Automake cũng phát triển từ các hoạt động hiện có trong cộng đồng. Dự án GNU đã chuẩn hóa một bộ mục tiêu thông thường cho Makefiles:
make all
sẽ xây dựng dự án
make clean
sẽ xóa tất cả các tệp đã biên dịch khỏi dự án
make install
sẽ cài đặt phần mềm
- những thứ như
make dist
và make distcheck
sẽ chuẩn bị nguồn để phân phối và xác minh rằng kết quả là một gói mã nguồn hoàn chỉnh
- và v.v.
Xây dựng các makefile tuân thủ trở nên nặng nề bởi vì có rất nhiều nồi hơi được lặp đi lặp lại nhiều lần. Vì vậy, Automake là một trình biên dịch mới được tích hợp với autoconf và đã xử lý "nguồn" Makefile's (tên là Makefile.am) thành Makefiles mà sau đó có thể được cung cấp cho Autoconf.
Chuỗi công cụ automake / autoconf thực sự sử dụng một số công cụ trợ giúp khác và chúng được tăng cường bởi các thành phần khác cho các tác vụ cụ thể khác. Khi sự phức tạp của việc chạy các lệnh này theo thứ tự tăng lên, nhu cầu về một kịch bản sẵn sàng để chạy đã được sinh ra, và đây là nơi autogen.sh xuất phát.
Theo như tôi biết, Gnome là dự án giới thiệu việc sử dụng tập lệnh trợ giúp autogen.sh này