2011-09-13 37 views
40

Tôi có một makefile trông như thế này:Biểu tượng phần trăm làm gì trong một makefile?

include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS)) 

%-test: 
     Something here 

tôi hiểu những gì nó là dành cho trong dòng nguyên tắc mục tiêu. Biển báo % hoạt động ở dòng đầu tiên là gì? Nó có bất cứ điều gì để làm phần trăm đăng nhập vào dòng quy tắc mục tiêu?

Khi tôi viết make sometarget, các dòng trong makefile không được viết như là một phần của bất kỳ quy tắc nào (như dòng đầu tiên trong tệp makefile này) được thực thi chưa? Nếu có, thì thứ tự thực hiện là gì?

Trả lời

33

Như bạn có thể đọc trong the GNU make manual, phần trăm hoạt động như một ký tự đại diện. Đối số đầu tiên của patsubstfunction sẽ tạo thành mẫu. Mỗi mục/từ trong đối số cuối cùng được so sánh với mẫu này, và nếu nó phù hợp, nó được thay thế bằng đối số thứ hai. Nếu có biểu tượng ký tự đại diện (%) trong mẫu, điều này sẽ khớp với bất kỳ số ký tự nào và các ký tự này được sao chép vào chuỗi thay thế tại vị trí của% trong đối số thứ hai.

Trong ví dụ của bạn mẫu chỉ là biểu tượng ký tự đại diện, vì vậy nó sẽ khớp với bất kỳ từ nào trong đối số cuối cùng của hàm và từ này sẽ được sao chép vào chuỗi thay thế (đối số thứ hai) ở vị trí của% .

Ví dụ có thể làm cho mọi thứ rõ ràng hơn. Giả sử TEST_SUBDIRS chứa hai tên.

TEST_SUBDIRS := test1 test2 
include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS)) 

Điều này sau đó tương đương như sau.

include $(src)/test1/Make.tests $(src)/test2/Make.tests 

Một makefile được xử lý tuần tự, từng dòng một. Các bài tập thay đổi là "được nội bộ hóa" và các câu lệnh bao gồm nội dung của các tệp khác được chèn theo nghĩa đen tại vị trí đó sau đó nội dung đó được xử lý như một phần của tệp makefile.
Biểu đồ phụ thuộc được hình thành từ các quy tắc khi chúng được đọc và sau khi toàn bộ tệp được xử lý, các công thức nấu ăn cần thiết được thực hiện để cập nhật mục tiêu được yêu cầu.

Các vấn đề liên quan