Makefile - Biên dịch
Các makechương trình là một tiện ích thông minh và hoạt động dựa trên những thay đổi bạn thực hiện trong các tệp nguồn của mình. Nếu bạn có bốn tệp main.cpp, hello.cpp, factorial.cpp và functions.h, thì tất cả các tệp còn lại phụ thuộc vào functions.h và main.cpp phụ thuộc vào cả hello.cpp và factorial.cpp. Do đó, nếu bạn thực hiện bất kỳ thay đổi nào trong các hàm.h, thìmakebiên dịch lại tất cả các tệp nguồn để tạo tệp đối tượng mới. Tuy nhiên, nếu bạn thực hiện bất kỳ thay đổi nào trong main.cpp, vì điều này không phụ thuộc vào bất kỳ tệp nào khác, thì chỉ tệp main.cpp được biên dịch lại, còn help.cpp và factorial.cpp thì không.
Trong khi biên dịch một tệp, makekiểm tra tệp đối tượng của nó và so sánh các tem thời gian. Nếu tệp nguồn có dấu thời gian mới hơn tệp đối tượng, thì nó tạo tệp đối tượng mới giả sử rằng tệp nguồn đã được thay đổi.
Tránh biên dịch
Có thể có một dự án bao gồm hàng nghìn tệp. Đôi khi bạn có thể đã thay đổi một tệp nguồn nhưng bạn có thể không muốn biên dịch lại tất cả các tệp phụ thuộc vào nó. Ví dụ: giả sử bạn thêm một macro hoặc một khai báo vào tệp tiêu đề mà các tệp khác phụ thuộc vào đó. Bảo thủ,make giả sử rằng bất kỳ thay đổi nào trong tệp tiêu đề đều yêu cầu biên dịch lại tất cả các tệp phụ thuộc, nhưng bạn biết rằng chúng không cần biên dịch lại và bạn không muốn lãng phí thời gian chờ chúng biên dịch.
Nếu bạn đoán trước được sự cố trước khi thay đổi tệp tiêu đề, bạn có thể sử dụng cờ `-t '. Lá cờ này cho biếtmakekhông chạy các lệnh trong quy tắc, mà là để đánh dấu mục tiêu đã cập nhật bằng cách thay đổi ngày sửa đổi cuối cùng của nó. Bạn cần làm theo quy trình này -
Sử dụng lệnh `make 'để biên dịch lại các tệp nguồn thực sự cần biên dịch lại.
Thực hiện các thay đổi trong tệp tiêu đề.
Sử dụng lệnh `make -t 'để đánh dấu tất cả các tệp đối tượng là cập nhật. Lần sau khi bạn chạy make, những thay đổi trong tệp tiêu đề không gây ra bất kỳ biên dịch lại nào.
Nếu bạn đã thay đổi tệp tiêu đề vào thời điểm một số tệp cần biên dịch lại, thì đã quá muộn để thực hiện việc này. Thay vào đó, bạn có thể sử dụng cờ `-o tệp ', cờ này đánh dấu một tệp được chỉ định là" cũ ". Điều này có nghĩa là, bản thân tệp sẽ không được làm lại và không có gì khác sẽ được làm lại trên tài khoản của nó. bạn cần làm theo quy trình này -
Biên dịch các tệp nguồn cần biên dịch vì các lý do độc lập với tệp tiêu đề cụ thể, với `tệp tiêu đề make -o '. Nếu có liên quan đến một số tệp tiêu đề, hãy sử dụng tùy chọn `-o 'riêng biệt cho từng tệp tiêu đề.
Cập nhật tất cả các tệp đối tượng bằng `make -t '.