Hệ thống xây dựng GNU – Wikipedia

GNU Build System còn được gọi là Autotools là một bộ công cụ lập trình được thiết kế để hỗ trợ làm cho các gói mã nguồn di động được với nhiều hệ thống giống Unix.

Có thể khó tạo ra một chương trình phần mềm di động: trình biên dịch C khác nhau từ hệ thống này sang hệ thống khác; một số chức năng thư viện bị thiếu trên một số hệ thống; tập tin tiêu đề có thể có tên khác nhau. Một cách để xử lý việc này là viết mã có điều kiện, với các khối mã được chọn bằng các chỉ thị tiền xử lý ( #ifdef ); nhưng vì sự đa dạng của môi trường xây dựng nên cách tiếp cận này nhanh chóng trở nên khó kiểm soát. Autotools được thiết kế để giải quyết vấn đề này dễ quản lý hơn.

Autotools là một phần của chuỗi công cụ GNU và được sử dụng rộng rãi trong nhiều gói phần mềm và nguồn mở miễn phí. Các công cụ thành phần của nó được cấp phép phần mềm miễn phí theo Giấy phép Công cộng GNU với các ngoại lệ giấy phép đặc biệt [1][2] cho phép sử dụng phần mềm độc quyền.

Hệ thống xây dựng GNU cho phép xây dựng nhiều chương trình bằng quy trình hai bước: configure sau đó là tạo . [3]

Thành phần [ chỉnh sửa ]

Sơ đồ lưu lượng của autoconf và automake

Autotools bao gồm các chương trình tiện ích GNU Autoconf, Automake và Libtool. [4] cấu hình và Bộ sưu tập trình biên dịch GNU, còn được gọi là GCC.

GNU Autoconf [ chỉnh sửa ]

Autoconf tạo tập lệnh cấu hình dựa trên nội dung của tệp configure.ac cơ thể cụ thể của mã nguồn. Tập lệnh cấu hình khi chạy, quét môi trường xây dựng và tạo tập lệnh cấp dưới config.status lần lượt chuyển đổi các tệp đầu vào khác và phổ biến nhất là Makefile.in thành các tệp đầu ra ( Makefile ) phù hợp với môi trường xây dựng đó. Cuối cùng, chương trình make sử dụng Makefile để tạo các chương trình thực thi từ mã nguồn.

Độ phức tạp của Autotools phản ánh sự đa dạng của các trường hợp theo đó một bộ mã nguồn có thể được xây dựng.

  • Nếu một tệp mã nguồn bị thay đổi thì nó đủ để chạy lại tạo chỉ biên dịch lại một phần của phần thân của mã nguồn bị ảnh hưởng bởi thay đổi.
  • Nếu là .in tệp đã thay đổi sau đó đủ để chạy lại config.status tạo .
  • Nếu phần thân của mã nguồn được sao chép sang máy tính khác thì nó là đủ để chạy lại configure (chạy config.status ) và tạo . (Vì lý do này, mã nguồn sử dụng Autotools thường được phân phối mà không có các tệp mà configure tạo ra.)
  • Nếu phần thân của mã nguồn được thay đổi cơ bản hơn, thì configure.ac và các tập tin .in cần phải được thay đổi và tất cả các bước tiếp theo cũng được thực hiện.

Để xử lý tập tin, autoconf sử dụng triển khai GNU của hệ thống macro m4.

Autoconf đi kèm với một số chương trình phụ trợ như Autoheader, được sử dụng để giúp quản lý các tệp tiêu đề C; Autoscan, có thể tạo tệp đầu vào ban đầu cho Autoconf; và ifnames có thể liệt kê C định danh tiền xử lý được sử dụng trong chương trình.

GNU Automake [ chỉnh sửa ]

Automake giúp tạo di động Makefile lần lượt được xử lý với tiện ích tạo. Nó lấy đầu vào là Makefile.am và biến nó thành Makefile.in được sử dụng bởi tập lệnh cấu hình để tạo tệp Makefile . Nó cũng thực hiện theo dõi phụ thuộc tự động; mỗi khi tệp nguồn được biên dịch, danh sách các phụ thuộc (ví dụ: tệp tiêu đề C) được ghi lại. Sau đó, bất cứ lúc nào thực hiện được chạy và một phụ thuộc dường như đã thay đổi, các tệp phụ thuộc sẽ được xây dựng lại.

GNU Libtool [ chỉnh sửa ]

Libtool giúp quản lý việc tạo các thư viện tĩnh và động trên các hệ điều hành giống như Unix. Libtool thực hiện điều này bằng cách trừu tượng hóa quá trình tạo thư viện, che giấu sự khác biệt giữa các hệ thống khác nhau (ví dụ: hệ thống GNU / Linux so với Solaris).

Gnulib [ chỉnh sửa ]

Gnulib đơn giản hóa quy trình tạo phần mềm sử dụng Autoconf và Automake di động cho nhiều hệ thống.

Autotools hỗ trợ một người hoặc nhóm phát triển phần mềm viết phần mềm đa nền tảng và cung cấp cho cộng đồng người dùng rộng hơn nhiều, bao gồm cả ở dạng mã nguồn cho những người dùng muốn tự xây dựng phần mềm. Trong hầu hết các trường hợp, người dùng chỉ cần chạy tập lệnh cấu hình được cung cấp (không có phụ thuộc nào ngoài sự hiện diện của lớp vỏ tương thích Bourne), sau đó chương trình tạo . không cần phải tự cài đặt Autotools trên máy tính.

Nó có thể được sử dụng cả để xây dựng các chương trình gốc trên máy xây dựng và cũng để biên dịch chéo cho các kiến ​​trúc khác. [6]

Phần mềm biên dịch chéo để chạy trên máy chủ Windows từ một GNU / Linux hoặc hệ thống xây dựng tương tự Unix khác cũng có thể, sử dụng MinGW, tuy nhiên việc biên dịch riêng thường được mong muốn trên các hệ điều hành (như họ hệ thống Microsoft Windows) không thể tự chạy các tập lệnh shell Bourne. Điều này làm cho việc xây dựng phần mềm như vậy trên hệ điều hành Windows khó hơn một chút so với trên hệ thống giống Unix cung cấp vỏ Bourne như một thành phần tiêu chuẩn. Tuy nhiên, người ta có thể cài đặt hệ thống Cygwin hoặc MSYS trên Windows để cung cấp lớp tương thích giống Unix, cho phép cấu hình các tập lệnh chạy. Cygwin cũng cung cấp Bộ sưu tập Trình biên dịch GNU, GNU make và các phần mềm khác cung cấp một hệ thống gần giống như Unix trong Windows; MSYS cũng cung cấp GNU make và các công cụ khác được thiết kế để hoạt động với phiên bản MinGW của GCC.

Mặc dù nhà phát triển dự kiến ​​sẽ cung cấp tập lệnh cấu hình cho người dùng cuối, đôi khi người dùng có thể muốn tự tạo lại tập lệnh cấu hình. Việc này có thể cần thiết nếu người dùng muốn tự sửa đổi mã nguồn. Những người dùng như vậy sẽ cần phải cài đặt Autotools và sử dụng các thành phần như autoreconf của nó.

Cấu hình autoconf được tạo có thể bị chậm vì nó thực thi các chương trình như trình biên dịch C nhiều lần để kiểm tra xem có thư viện, tệp tiêu đề và tính năng ngôn ngữ khác nhau không. Điều này đặc biệt ảnh hưởng đến Cygwin, do không có lệnh gọi hệ thống rẽ nhánh riêng, có thể thực thi các tập lệnh cấu hình chậm hơn đáng kể so với Linux. [7]

Phê bình [ chỉnh sửa ]

ACM Queue nhà phát triển FreeBSD Poul-Henning Kamp đã chỉ trích Hệ thống xây dựng GNU: [8]

Ý tưởng là tập lệnh cấu hình thực hiện khoảng 200 bài kiểm tra tự động, để người dùng không bị gánh nặng khi cấu hình libtool bằng tay. Đây là một ý tưởng tồi tệ khủng khiếp, đã bị chỉ trích nhiều vào những năm 1980 khi nó xuất hiện, vì nó cho phép mã nguồn giả vờ di động phía sau veneer của tập lệnh cấu hình, thay vì thực sự có chất lượng tính di động để bắt đầu. Đó là một trò hề mà ý tưởng cấu hình tồn tại.

Kamp phác họa lịch sử của hệ thống xây dựng trong các vấn đề về tính di động vốn có trong vô số các biến thể Unix của thập niên 1980 và chế giễu hệ thống xây dựng vì ngay cả trong thế giới POSIX được tiêu chuẩn hóa

31.085 dòng cấu hình cho libtool vẫn kiểm tra xem

tồn tại, mặc dù Unixen, thiếu chúng, không có đủ bộ nhớ để thực thi libtool cũng không đủ đĩa cho mã nguồn 16 MB.

Xem thêm [ chỉnh sửa ]

Tài liệu tham khảo [ chỉnh sửa ]

Liên kết ngoài [