Prohoster > Blog > tin tức mạng > Một nhân viên của Red Hat trình bày hệ thống lắp ráp Mục tiêu. Phát hành GNU Make 4.2
Một nhân viên của Red Hat trình bày hệ thống lắp ráp Mục tiêu. Phát hành GNU Make 4.2
Richard WM Jones, tác giả libguestfs, làm việc tại Red Hat, giới thiệu tiện ích lắp ráp mới Các mục tiêu, nhằm mục đích loại bỏ những thiếu sót và vấn đề trong tiện ích của make trong khi vẫn duy trì tính đơn giản và dễ hiểu tổng thể của tập lệnh. Tiện ích này được thiết kế vào năm 1976 và có một số thiếu sót về mặt khái niệm; Mục tiêu có kế hoạch loại bỏ những thiếu sót này mà không thay đổi khái niệm chung.
Mã nguồn mục tiêu phân phối bởi được cấp phép theo GPLv2+.
Chỉ hỗ trợ một chiến thuật giải quyết phần phụ thuộc - "lệnh lắp ráp được chạy nếu tệp đích bị thiếu hoặc cũ hơn một trong các phần phụ thuộc." Mục tiêu có kế hoạch triển khai các chiến thuật khác, chẳng hạn như kiểm tra sự hiện diện của URL, so sánh thời gian sửa đổi với bất kỳ tệp nào, đánh giá bản dựng gói Cái nào, so sánh tổng kiểm tra, chạy các trường hợp kiểm thử với việc bỏ qua kiểm thử có chọn lọc.
Khi xử lý mục tiêu xây dựng, make không phân tách các tệp và tên quy tắc và kết quả là không có sự kiểm tra nào khi chạy quy tắc, tệp mà nó tuyên bố là đã tạo sẽ thực sự được tạo. Ví dụ: nếu bạn có một quy tắc tên là "kiểm tra" chạy các tập lệnh có kiểm tra, một tệp có tên "kiểm tra" vô tình được tạo, thì các kiểm tra sẽ không còn được gọi nữa, vì make sẽ coi rằng mục tiêu đã được xây dựng và không yêu cầu bất kỳ hành động nào (để giải quyết vấn đề đang xảy ra, bạn có thể chỉ định lệnh “.PHONY: test”). Mục tiêu phân tách rõ ràng các tệp và tên quy tắc.
Sự cố khi chỉ cung cấp một tham số cho hướng dẫn lắp ráp.
Mục tiêu cho phép bạn sử dụng số lượng tham số được đặt tên tùy ý. Ví dụ: bạn có thể trích xuất riêng dấu hiệu của tệp gỡ lỗi từ tên:
Sự cố khi tương tác với trình thông dịch shell. Ví dụ: nhu cầu kiểm soát việc thoát khoảng trắng trong tên tệp và thư mục, lãng phí tài nguyên khi khởi chạy trình thông dịch shell riêng khi thực thi từng lệnh, diễn giải kép của ký tự “$” (được sử dụng trong cả shell và make), có tính đến các vết lõm.
Những vấn đề này được giải quyết trong Mục tiêu bằng cách sử dụng ký hiệu “%” thay vì “$” cho các biến tập hợp (“$” chỉ còn lại cho shell), sử dụng trình phân tích cú pháp LALR(1), yêu cầu bạn bao quanh các đường dẫn và tên tệp bằng dấu ngoặc kép và đánh dấu các khối mã bằng dấu ngoặc nhọn. Toàn bộ khối lệnh được khởi chạy trong một phiên bản của shell lệnh và trong khối, cho phép định dạng mã tùy ý mà không cần tham chiếu đến các khoảng trắng đặc biệt.
Chiến thuật lắp ráp được xác định bằng các quy tắc đặc biệt có thể được sử dụng để xác định nhu cầu lắp ráp lại mục tiêu lắp ráp. Nếu một liên kết được tạo đến sự hiện diện của một tệp thì điều này được xác định rõ ràng thông qua dấu hiệu tương ứng (“mục tiêu” cho tên quy tắc và *file (“mục tiêu”) để kiểm tra tệp).
Nhà phát triển có thể xác định các thuộc tính tùy ý của chiến thuật lắp ráp. Cờ "*file" được xác định theo mặc định (@{...} biểu thị việc ngăn chặn đầu ra và "exit 99" báo hiệu nhu cầu xây dựng lại):
chiến thuật *tệp (tên tệp) = @{
kiểm tra -f %tên tệp || lối ra 99
cho f tính bằng %