Làm cho tôi chỉ đơn giản là một tập lệnh shell với việc xử lý các đối số dòng lệnh dễ dàng hơn một chút.
Tại sao nó là tiêu chuẩn để chạy make thay vì ./make.sh
Làm cho tôi chỉ đơn giản là một tập lệnh shell với việc xử lý các đối số dòng lệnh dễ dàng hơn một chút.
Tại sao nó là tiêu chuẩn để chạy make thay vì ./make.sh
Câu trả lời:
Ý tưởng chung là make
hỗ trợ (hợp lý) xây dựng lại tối thiểu - nghĩa là bạn nói với nó những phần nào trong chương trình của bạn phụ thuộc vào những phần khác. Khi bạn cập nhật một số phần của chương trình, nó chỉ xây dựng lại các phần phụ thuộc vào đó. Mặc dù bạn có thể làm điều này với tập lệnh shell, nhưng nó sẽ tốn nhiều công sức hơn (kiểm tra rõ ràng ngày sửa đổi lần cuối trên tất cả các tệp, v.v.) Thay thế rõ ràng duy nhất với tập lệnh shell là xây dựng lại mọi thứ mọi lúc. Đối với các dự án nhỏ, đây là một cách tiếp cận hoàn toàn hợp lý, nhưng đối với một dự án lớn, việc xây dựng lại hoàn chỉnh có thể dễ dàng mất một giờ hoặc hơn - sử dụng make
, bạn có thể dễ dàng thực hiện điều tương tự trong một hoặc hai phút ...
Tôi có lẽ cũng nên thêm rằng có khá nhiều lựa chọn thay thế để làm cho nó có ít nhất khả năng tương tự rộng rãi. Đặc biệt trong trường hợp chỉ có một vài tệp trong một dự án lớn đang được xây dựng lại, một số trong số chúng (ví dụ: Ninja ) thường nhanh hơn đáng kể so với thực hiện.
Có nhiều thứ khác nhau rất khó thực hiện với shell script ...
Đảm bảo rằng chỉ các tệp được yêu cầu được biên dịch lại khi bạn thay đổi các tệp nguồn của mình.
Ví dụ:
final : 1.o 2.o
gcc -o final 1.o 2.o
1.o : 1.c 2.h
gcc -c 1.c
2.o : 2.c 2.h
gcc -c 2.c
Nếu tôi chỉ thay đổi tệp 2.h
và chạy make
, nó sẽ thực thi cả 3 lệnh theo thứ tự ngược lại.
Nếu tôi chỉ thay đổi tệp 1.c
và chạy make
, nó chỉ thực hiện 2 lệnh đầu tiên theo thứ tự ngược lại.
Cố gắng thực hiện điều đó với kịch bản shell của riêng bạn sẽ bao gồm rất nhiều if/else
kiểm tra.
rsync -r -c -I $SOURCE $DEST_DIR
trong vỏ.
Cũng như ở trên, Make là một ngôn ngữ lập trình song song khai báo (-ish).
Giả sử bạn có 4.000 tệp đồ họa để chuyển đổi và 4 CPU. Hãy thử viết một kịch bản shell 10 dòng (tôi đang hào phóng ở đây) sẽ làm điều đó một cách đáng tin cậy trong khi bão hòa CPU của bạn.
Có lẽ câu hỏi thực sự là tại sao mọi người bận tâm viết kịch bản shell.
thực hiện xử lý phụ thuộc: makefile mô tả chúng: nhị phân phụ thuộc vào tệp đối tượng, mỗi tệp đối tượng phụ thuộc vào tệp nguồn và tiêu đề ... khi chạy được thực hiện, ngày của tệp được so sánh để xác định những gì cần được biên dịch lại .
Người ta có thể gọi trực tiếp một mục tiêu không xây dựng mọi thứ được mô tả trong Makefile.
Ngoài ra, cú pháp tạo cung cấp thay thế, vpath
Tất cả điều này có thể được viết bằng shell script, với việc bạn đã có nó.