Nasıl kullanacağımı make
ve makefiles öğreniyorum , bu yüzden bu küçük dosyayı yazdım:
%.markdown: %.html
pandoc -o $< $@
Ama koştuğumda make
, elde ettiğim tek şey make: *** No targets. Stop.
Neler oluyor?
Nasıl kullanacağımı make
ve makefiles öğreniyorum , bu yüzden bu küçük dosyayı yazdım:
%.markdown: %.html
pandoc -o $< $@
Ama koştuğumda make
, elde ettiğim tek şey make: *** No targets. Stop.
Neler oluyor?
Yanıtlar:
Sorun şu ki, bu make
hedeflerinizi bilmiyor.
Yukarıdaki Makefile'inizi make stackoverflow.markdown
örneğin ile çalıştırabilirsiniz ve çalışacaktır.
make
ancak yalnızca hedeflerinizi nasıl oluşturacağınızı belirttiğiniz için hangisini değil, başarısız olur.
As leiaz noktası dışarı yukarıdaki desen kural olarak adlandırılır örtülü kural .
SRC = $(wildcard *.html)
TAR = $(SRC:.html=.markdown)
.PHONY: all clean
all: $(TAR)
%.markdown: %.html
pandoc -o $< $@
clean:
rm -f $(TAR)
SRC
get'in tüm kaynak dosyaları (ile biten .html
) Makefile's aracılığıyla wildcard
.
TAR yerine listelenen her kaynak dosyayı SRC
bir hedef ile biten ile .markdown
yerine .html
.
PHONY , her zaman güncel olmayan ve bu nedenle her zaman yürütülen fiziksel olmayan hedefleri listeler - bunlar genellikle all
ve clean
.
Hedefall
bağımlılık (dosyalar sağ tarafında listelenen sahiptir :
tümü) *.markdown
dosyaları. Bu, tüm bu hedeflerin yürütüldüğü anlamına gelir.
%.markdown: %.html
pandoc -o $< $@
Bu snippet şöyle diyor: ile biten her hedef .markdown
, bağımlılığın bitmesi dışında aynı ada sahip bir dosyaya bağlıdır .html
. Joker%
bir şekilde görülecek olan *
kabuk gibi. %
Sağ tarafta ise sol tarafta maçın karşılaştırılır. Kaynak .
Not arasında boşluk dizisi Infront olduğu pandoc
bir TAByana, make
bir standart olarak tanımladığı.
Son olarak, sahte clean
hedef sisteminizi bu Makefile ile oluşturduğunuz dosyalardan nasıl temizleyeceğinizi gösterir. Bu durumda, tüm hedefleri (adlandırılmış dosyaları) siler *.markdown
.
makefile
sıfırdan dosya oluşturabilir veya sadece mevcut dosyaları güncelleyebilir mi? Çünkü oluşturulan dosyaları sildiğimde çalışmayı durdurur. Aptalca soru biliyorum, ama bu bana Newfoundland ^^ "
Örüntü kuralları örtük kurallardır.
Makefile'nizde tanımlanmış hedefiniz yok. Komut satırında hedef belirtebilirsiniz: make something.markdown
oluşturmak için tarifi kullanacaktır something.markdown
dan something.html
.
Veya Makefile'nize varsayılan hedefleri belirten bir kural ekleyebilirsiniz.
all: file1.markdown file2.markdown
all: *.markdown
Sadece çalıştırdığınızda make
, ilk kural ilk hedefi varsayılan hedeftir . Çağrılması gerekmez all
.
Yukarıda, hedef all
olarak önkoşul olarak yapmak istediğiniz tüm dosyalar bulunur, böylece siz make all
listelendiğiniz tüm dosyaları yapar.
pandoc
komutun önündeki bir sekme . Make, boşluk değil, sekme olanlar hakkında çok seçici.