2016-03-22 23 views
0

Tüm .txt dosyalarını/src -/dest dizinine kopyalayan basit bir makefile yazdım. Ama bu çalışmıyor.makefile ile ilgili sorunlar '%'

Sanırım sorun '%' civarındadır, ancak bulamıyorum. Bana yardımcı olabilir misiniz?

Makefile:

all:dest/%.txt 

dest/%.txt: src/%.txt 
    @[ -d dest ] || mkdir dest 
    cp $< [email protected] 

Hata bilgisi: marka: *** Hiçbir kural 'hedef dest/%.txt', needed by tüm yapmak. Durdurmak.

=============================== tüm cevaplar için

teşekkürler! Şimdi bu makefilin ne yaptığını anlıyorum. İlk satırı "all: dest/a.txt" olarak değiştirirseniz, bu arada src/dizininde bir.txt vardır. Sadece src/a.txt dosyasını src/dizinindeki tüm dosyaları kopyalamak yerine dest/a.txt dosyasına kopyalar.

cevap

0

Bunun için joker karakterlere ihtiyacınız yok.

all: 
    cp src/*.txt dest/ 
+1

Bu yalnızca her zaman değiştirilen kaynak dosyaları değil, her dosyayı kopyalar. –

+0

Sadece bir örnek, "kopyala/yapıştır" değil, – Joel

+1

kullanın Bu, daha az * bir cevap yararlı kılar. –

0

Böyle nesne dosyalarına C dosyalarını derlemek için kural olarak genel tarifleri ile % gösterimini kullanabilirsiniz.

Bunu yapmaya çalıştığınız gibi bir hedefte kullanamazsınız.

dest dizininin içinde .txt dosyasının bulunmadığı durumu göz önünde bulundurun. make 'a hangi dosyaların dizine kopyalanması gerektiğini söyleyecek bir şey yok.

Eski okul make ile çalışmaya eğilimliyim ve makefile numaralı joker karakterleri kullanmıyorum. Yani, dizinde istediğim dosyaları listeleyip koşullu bir kopya kuralı yazdım.

+0

Yani * hedef * yerine * önkoşul demek istemiyor musunuz? Her model kuralı * hedefinde *% * olmalıdır. Sorun, ilk kuraldaki '%' ile, örüntü kuralı olarak yorumlanmayan bir hedeftir, çünkü * hedefin *% 'si yoktur. – reinierpost

+0

@reinierpost: Hedefin bir bağımlılık ya da önkoşulu olarak kullanılmasına rağmen, hedefe, "all" e atıfta bulunuyordum. Tartışmaya biraz açık. –

+0

Sizin ifadeleriniz bana yanlış geliyor. – reinierpost