2010-11-11 14 views
19

Makefile'nin kendisinin değişmesi durumunda, güvenli bir bahis tüm hedeflerin güncelliğini göz önünde bulundurmak olacaktır.Dosya dosyasının kendisine bağlı olarak

Bu bağımlılığı eklemek için akıllıca bir yol var mı? Alternatif var mı?

+1

Aynı soruya çok uzun bir süre önce sordum: http://stackoverflow.com/questions/3871444/making-all-rules-depend-on-the-makefile-itself – reinierpost

+0

Garip bir şekilde gelmedi arama, ilgili bile değil. –

+0

Bu yeterli olmayabilir. Değişkenler değiştiğinde ne olur? (Örneğin, bir "make CDEFS = debug" ve "make CDEFS = release" arasında bir _clean_ yapmanız gerekebilir.) – bobbogo

cevap

6

Güvenli bir bahis, ama korkunç bir fikir. Örnek: automake kullanıyor ve tek bir kaynak dosyası eklemek için Makefile.am'u güncelliyorsunuz. Doğru cevap sadece yeni dosyayı derlemek ve bağlantı kurmaktır. Planınızda her şey yeniden oluşturulacaktır.

Üstelik bağımlılık ekleyerek dosyayı dokunma sürece bir şey yapmak için gitmiyor, bir şey gibi: Bu daha sonra eşzamanlı değişikliği tespit etme mtime kullanmak editörleri çelme olacak

$(SRCS): Makefile 
    touch [email protected] 

(emacs birini olduğu örnek).

Büyük bir şey yapıyorsanız, değişikliği yaptıktan sonra make clean all çalıştırın.

+0

Kaynakların güncellenmeyeceğini düşünmedim. Ama ya tüm _targets_ Makefile'ye bağlıysa? İyi bir puan elde etmek için +1. –

+0

@Matt Joiner: Çalışır (ayrıca, dahil edilen tüm .mk dosyalarının geçişini de kapatmak zorunda kalırsınız), ancak yine de daha fazla yeniden kodlama işlemine sahip olursunuz. Rahatsız etmemek daha iyi: Eğer varsayılan olarak kısa kurulumlar ve gerekirse tam bir yapıya sahip olursunuz. Bunu koyarsanız, sadece küçük bir çimdik oluşturduysanız kısa yapıyı yapmanın hiçbir yolu yoktur. Çok fazla C++ işi yaptığını biliyorum. C++ projesinin tam bir yeniden inşasının maliyetinin önemsiz olduğunu ciddi olarak önerin. –

+0

Makefile'a neden dokunmanız gerekir? Kural, yalnızca Makefile zaten nesne dosyalarından daha yenise çalıştırılır. –

4

nesne dosyaları makefile bağlıdır emin olun: Makefile yapmak dosyasının adıdır

$(OBJFILES) : Makefile 

.

+0

SRCFILES'i kendim doldurmam gerektiğini varsayar mıyım? –

+0

Yep. Benim sorum biraz kibirli olabilir ama sormak istediğim alternatif bir çözümden ne tür özellikler istediniz. "Her hedefe" bağımlılık yapmanın bir yolunu bilmiyorum. –

İlgili konular