BUILT_SOURCES = version.h
tüm dosyalar kuralları çalıştırmak, normal derleme herhangi önce inşa edilecek.
Ancak bu hafif bir sorun oluşturur: version.h
her make
çağırma yeniden inşa edilmesi gerekecektir gibi, #include
s version.h
her make
kaçak tekrar tetiklenecek her foo.c
dosyanın recompilation. Yeniden derlemenin yalnızca değişmiş bir şey olduğunda gerçekleşmesi tercih edilir.
Bu soruna geçici bir çözüm bulmak için
, her seferinde "oluşturulan" bir damga dosyasında bir
BUILT_SOURCES
bağımlılık kullanın (aslında hiçbir zaman oluşturulur, böylece yapı kuralı her zaman çalışır).
version.h.tmp
version.h
aslında farklı ise o damga dosyası için yapı kural
version.h
bir
version.h.tmp
olarak yeni
version.h
dosyası ve tek kopya
version.h.tmp
oluşturur (sizin
version.h
kural yaptığı gibi). hiçbir şey
version.h
değişti, yani onun damgası (mtime) aynı kalır ve
version.h
bağlı nesnelerin hiçbir yapı tetiklenir:
BUILT_SOURCES = version.stamp
version.stamp:
echo '#define VERSION "'`hg id`'"' > version.h.tmp
cmp version.h.tmp version.h || mv version.h.tmp version.h
Bu çözüm için ne soruyorsun yapacağız.
Maalesef olsa, bir dist Tarball'dan inşa ediyoruz hafif sorun olacaktır: Sonra hg id
size sahte bilgi verecektir ve muhtemelen tarball hiçbir version.h
yoktur, bu nedenle yapı başarısız veya sahte versiyonu bilgileri içerir .
Bu sorunu, git
kullanan xf86-video-radeonhd projesi için çözdüm. Bu çözümde oluşturulan git-version.h
dosyası, yalnızca tek bir sürüm numarasından daha fazla sürüm bilgisi içerir. Sen git_version.sh sonunda benim bu güncelleme okunur-if-farklı çözümü ve umarım tüm dışı kaynak ağacının işlenmesi ve dahil BUILT_SOURCES
Kargaburun (görebileceği-dist-tarball inşa vakası Eğer ilgileniyorsanız RadeonHD.am içinde.
Bu özellik, bir özellik ile harika çalışır. Automake el kitabından: "BUILT_SOURCES'in yalnızca 'make all', 'make check' ve 'make make' tarafından yapıldığını vurgulamak önemli olabilir. Bu, belirli bir hedefi (örneğin, 'make foo') oluşturamayacağınız anlamına gelir. Yapılı bir kaynağa bağlıysa temiz bir ağaç. " Yine de, bildiğim en iyi çözüm. – phs
Eğer birisi 'foo' yapmak için özel olarak çalıştırmayı biliyorsa, ne yaptıklarına dair bir miktar bilgi edinebilir ve bu nedenle BUILT_SOURCES öğesinin yeniden oluşturulduğundan emin olmaları gerekip gerekmediğini öğrenebilirsiniz. – ndim
Bunları tek bir satıra '' && '' operatörüyle koymalısınız, aksi halde version.h yapınızı paralelleştirmekten mutluluk duyacaktır. –