Nasıl kullanacağımı makeve 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ı makeve 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 makehedeflerinizi 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)
SRCget'in tüm kaynak dosyaları (ile biten .html) Makefile's aracılığıyla wildcard.
TAR yerine listelenen her kaynak dosyayı SRCbir hedef ile biten ile .markdownyerine .html.
PHONY , her zaman güncel olmayan ve bu nedenle her zaman yürütülen fiziksel olmayan hedefleri listeler - bunlar genellikle allve clean.
Hedefall bağımlılık (dosyalar sağ tarafında listelenen sahiptir :tümü) *.markdowndosyaları. 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 pandocbir TAByana, makebir standart olarak tanımladığı.
Son olarak, sahte cleanhedef 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.
makefilesı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.markdownoluşturmak için tarifi kullanacaktır something.markdowndan 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 allolarak önkoşul olarak yapmak istediğiniz tüm dosyalar bulunur, böylece siz make alllistelendiğiniz tüm dosyaları yapar.
pandockomutun önündeki bir sekme . Make, boşluk değil, sekme olanlar hakkında çok seçici.