Boşluklarla ayrılmış dosya adlarından oluşan bir listedeki uzantıların değiştirilmesi yaygın bir gerekliliktir ve bunun için yerleşik özellikler vardır. x
Listedeki her ismin sonuna bir eklemek isterseniz :
FILES_OUT = $(FILES_IN:=x)
Genel biçim $(VARIABLE:OLD_SUFFIX=NEW_SUFFIX)
. Bu, bu son ek ile biten her sözcüğün sonundaki değerini alır VARIABLE
ve değiştirir (eşleşmeyen sözcükler değiştirilmeden bırakılır). GNU bu özelliği (her make uygulamasında mevcut olan) ikame referanslarını çağırır .OLD_SUFFIX
NEW_SUFFIX
Sadece değişim istiyorsanız .doc
içine .docx
ve .xls
içine .xlsx
bu özelliği kullanarak, bir ara değişkeni kullanmak gerekir.
FILES_OUT_1 = $(FILES_IN:.doc=.docx)
FILES_OUT = $(FILES_OUT_1:.xls=.xlsx)
Biraz daha genel sözdizimini de kullanabilirsiniz $(VARIABLE:OLD_PREFIX%OLD_SUFFIX=NEW_PREFIX%NEW_SUFFIX)
. Bu özellik GNU yapımına özgü değildir, ancak basit sonek değiştirme ikamesi kadar taşınabilir değildir.
Aynı satırda birden çok ikameyi zincirlemenize izin veren bir GNU make özelliği de vardır: patsubst
işlev .
FILES_OUT = $(patsubst %.xls,%.xlsx,$(patsubst %.doc,%.docx,$(FILES_IN)))
FILES_OUT := $(patsubst %,%x,$(FILES_IN))
da kural gerçekten o kadar genel yapılabilirse.