Thay thế phần mở rộng trong danh sách các tên tệp được phân tách bằng khoảng trắng là một yêu cầu phổ biến và có các tính năng tích hợp cho việc này. Nếu bạn muốn thêm một x
vào cuối mỗi tên trong danh sách:
FILES_OUT = $(FILES_IN:=x)
Hình thức chung là $(VARIABLE:OLD_SUFFIX=NEW_SUFFIX)
. Điều này nhận giá trị VARIABLE
và thay thế OLD_SUFFIX
ở cuối mỗi từ kết thúc bằng hậu tố này bằng NEW_SUFFIX
(các từ không khớp được giữ nguyên). GNU gọi các tham chiếu thay thế tính năng này (tồn tại trong mọi thực hiện) .
Nếu bạn chỉ muốn thay đổi .doc
thành .docx
và .xls
vào .xlsx
sử dụng tính năng này, bạn cần phải sử dụng một biến trung gian.
FILES_OUT_1 = $(FILES_IN:.doc=.docx)
FILES_OUT = $(FILES_OUT_1:.xls=.xlsx)
Bạn cũng có thể sử dụng cú pháp tổng quát hơn một chút $(VARIABLE:OLD_PREFIX%OLD_SUFFIX=NEW_PREFIX%NEW_SUFFIX)
. Tính năng này không phải là duy nhất đối với GNU make, nhưng nó không phải là tính di động như sự thay thế thay đổi hậu tố đơn giản.
Ngoài ra còn có một tính năng tạo GNU cho phép bạn xâu chuỗi nhiều thay thế trên cùng một dòng: patsubst
hàm .
FILES_OUT = $(patsubst %.xls,%.xlsx,$(patsubst %.doc,%.docx,$(FILES_IN)))
FILES_OUT := $(patsubst %,%x,$(FILES_IN))
khi quy tắc thực sự có thể được thực hiện chung chung.