Örnek
Elimizde şöyle bir kod olsun.
Elimizde şöyle bir kod olsun.
%.foo: %.bar
cp $< $@
test: *.foo
echo *.foo
Uzantısı *.foo veya *.bar olan dosyaları bul ve komutu çalıştır anlamına gelir. $< ile bulunan dosyalar temsil edilir. $@ ile target temsil edilir. Çıktı olarak şunu alırız. Ancak bu istediğimiz şey değildir. Amacımız b.bar dosyasını b.foo haline getirmek.cp b.bar *.foo
echo *.foo
*.foo
Açıklaması şöyle.There is no *.foo file to begin with. So what make does is look for how to make *.foo literaly and the first rule does this. Make expands $< to the first pre-requisite (*.bar, which happens to be b.bar in this case). Make then runs the shell command cp b.bar *.foo. Since there is no *.foo, shell expands it to cp b.bar *.foo literally. That's how you get a *.foo file.Şöyle yaparız. wildcard ile b.bar dosyası bulunur. pathsubst ile b.foo haline getirilir.
%.foo: %.bar
cp $< $@
foos = $(patsubst %.bar,%.foo,$(wildcard *.bar))
test: $(foos)
echo $(foos)
Açıklaması şöyle.$(wildcard *.bar) expands to all the files ending in .bar, the patsubst call replaces .bar with .foo, and all the targets are then processed as you’d expect.
Hiç yorum yok:
Yorum Gönder