2010-03-20 13 views
7

Şu hedefler gibi bir şeye sahip bir makefile sahibim:makefile: başka bir hedeften ek bir hedef ve ek komutlar yürütmek

 
install: 
    do a whole bunch of stuff to install 

dist: install 
    cp README.txt $(INSTALL_DIR) 
    zip $(INSTALL_DIR) 

install hedeflerini tekrarlamadan ve distinstall komutunu kendi komutlarını çalıştırmadan önce yapmaya çalışıyorum.

make dist çağrısı gerçekten install hedefindeki tüm komutları yürütür, ancak daha sonra sadece durur ve kendi komutlarını çalıştırmaz, örn. cp.

Bir şey mi eksik?

+0

Normalde senin 'install' kural 'hepsi' ya da oralarda bağlı olacağı dist ve 'hepsi' yapacağını 'sürü 'yüklemek için', 'yüklemek için' bir sürü şey 'yüklemek için' şeyler 'inşa etmek. –

+0

@Jonathan Evet, aslında ne yapıyor. Bunu düzenleyeceğim. – cschol

cevap

9

makefile bu satırı eklemeyi deneyin

.PHONY: yüklemek

+0

Bu kadardı. Bunun neden gerekli olduğunu açıklayabilir misiniz? Teşekkürler. – cschol

+0

Yükleme dizini 'install' (veya belki 'dist') olarak adlandırıldı mı? Bu şeyleri karıştırır. '.PHONY' notasyonu (bir GNU Make uzantısı), 'hedefin' her zaman güncel olmadığı kabul edilir. –

+6

Jonathan'ın .PHONY hakkında söylediği şeyleri ayrıntılandırmak için, şöyle düşünün: Tüm hedeflerin gerçek dosyaları olduğunu varsayın ve dosyanın bulunup bulunamayacağını görmek için dosyaya bakıp bakmadığına bakarsanız, dosyanın tarih ve kural olarak kabul edilmemesi gerekir. idam. .PHONY, bunun gerçekten bir dosya olmadığını söyler, bu yüzden bakmayın ya da herhangi bir düzen/kural ile eşleştirmeye çalışmayın ve tabiki gerçekten de bir dosya/dizin söz konusuysa, bu dosyayı Hedef, hedefi bugüne kadar potansiyel olarak ele alıyor. http://www.gnu.org/s/hello/manual/make/Phony-Targets.html – jhabbott