Zastępowanie rozszerzeń na liście nazw plików oddzielonych białymi znakami jest powszechnym wymaganiem i są do tego wbudowane funkcje. Jeśli chcesz dodać x
na końcu każdej nazwy na liście:
FILES_OUT = $(FILES_IN:=x)
Ogólna forma to $(VARIABLE:OLD_SUFFIX=NEW_SUFFIX)
. Przyjmuje wartość VARIABLE
i zamienia OLD_SUFFIX
na końcu każdego słowa, które kończy się tym przyrostkiem NEW_SUFFIX
(słowa niepasujące pozostają niezmienione). GNU wywołuje tę funkcję (która istnieje w każdej implementacji make) odniesienia do zastępowania .
Jeśli chcesz tylko do zmian .doc
w .docx
i .xls
do .xlsx
korzystania z tej funkcji, należy użyć zmiennej pośredniej.
FILES_OUT_1 = $(FILES_IN:.doc=.docx)
FILES_OUT = $(FILES_OUT_1:.xls=.xlsx)
Możesz także użyć nieco bardziej ogólnej składni $(VARIABLE:OLD_PREFIX%OLD_SUFFIX=NEW_PREFIX%NEW_SUFFIX)
. Ta funkcja nie jest unikalna dla make GNU, ale nie jest tak przenośna jak zwykłe podstawianie zmieniające sufiksy.
Istnieje również funkcja GNU make, która pozwala łączyć wiele podstawień w tej samej linii: patsubst
funkcja .
FILES_OUT = $(patsubst %.xls,%.xlsx,$(patsubst %.doc,%.docx,$(FILES_IN)))
FILES_OUT := $(patsubst %,%x,$(FILES_IN))
jeśli reguła naprawdę może być tak ogólna.$(VARIABLE:OLD_SUFFIX=NEW_SUFFIX)
, do czego jeszcze się odnosisz?