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 patsubst
function 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.