2009-09-30 21 views
7

scons, bağımlılığın oluşturulup oluşturulmayacağını belirlemek için dosya modlarından ziyade MD5 karmalarını kullanır.scons "touch" eşdeğeri?

Bunun varsayılan davranış olmasını istiyorum. Ancak, belirli bir dosyanın güncelliğini (“dokunma” eşdeğeri) olduğunu varsaymak için onu zorlamak için herhangi bir yol var mı?

düzenleme: kullanım durumu:

ikili dosya F (o bozuk var ya ben bunu düzenlenebilir) ya da aracı X değişti bazı nedeni, dosyanın G için bir araç X'i kullanarak başka bir dosya G oluşturmak için kullanılır değişti ve ben G dosyasını ve bunun altındaki her şeyi yeniden oluşturmak istiyorum.

düzenleme: Bu yalnızca ara sıra kullanım içindir. Bunun her zaman olmasını istemiyorum, sadece birkaç kez istediğimde. Ayrıca belirli bir dosyayı önceden bilmeyebilirim. Bu nedenle belirli bir dosya oluşturmak için SConscript/SConstruct dosyalarını değiştirmek istemiyorum.

scons {something to specify file foobar.h} 

ve bu sadece scons yazarak MD5 kullanılarak düzenli yapı yapacağını, oysa foobar.h bağlı tüm dosyaları oluşturmak için scons zorlayacaktır Bağımlılık denetimi için sağlamalarının: Ne istiyorum bir komut isteminde bu yapmaktır . Bunu yapmak için SConscript/SConstruct dosyalarını önceden düzenlemeyi umursamıyorum (özel Decider, sanırım).

cevap

4

Scons'un interaktif seçeneğine bir göz attınız, orada belirli hedefleri temizleyebilir ve oluşturabilirsiniz.

man page describing this.

+0

huh, Hiç bilemedim - interaktif, bu bana tekrar/tekrarlanan bir süre kazandıracak. Teşekkürler! Ben de istediğim için kullanabilirim. –

+0

Eğer derlemelerde yeni çağrıları tetiklemek istiyorsanız, scons '- interaktif -no-cache' yapmalısınız, aksi takdirde etkileşimli komut' build' sadece önbellekten alıp derleyici kullanmaz. –

1

Bunu doğrudan yapmanın bir yolu olduğunu sanmıyorum. Söz konusu kaynak dosya, test.c tarafından oluşturulan gibi bir açık çıktıya sahipse, test.o kaldırılması, kaynak dosyanın bir derlemesini zorlar.

Bunun yerine, birden fazla farklı kaynak dosyadan alınan test.h'a dokunmak isterseniz, her şeyin yeniden oluşturulduğundan emin olmak için tüm projenizi temizlemekten daha iyi olabilirsiniz.

Bunu söyledikten sonra, dosya bağımlılıklarının nasıl ele alınacağını seçmenizi sağlayan Decider() function hakkında bilgi edinmek isteyebilirsiniz. Projenizdeki belirli dosyalar için özel bir karar verme işlevi bile seçebilirsiniz; böylece, touch yapabilmeniz ve yeniden oluşturmanız için bazı genel başlık dosyalarınız varsa, bunu yapabilirsiniz.

Güncelleme: En son sorunuzu cevaplamak için, sadece dosyayı G. silmek. Scons, bir dahaki sefere X'i çalıştırarak F'den yeniden oluşturur.

0

Tam bir tarihle saat başı ve saniyeye kadar bir kukla hedef dosya oluşturuyorum. Sonra diğer adımlar bu kukla hedef dosyasına bağlı. Bu, inşa adımının her yeniden derlenmesi ve sonraki adımların yeniden derlenmesine neden olması durumunda md5 değerini değiştirecektir. Alternatif olarak, kukla hedefi kaldırabilirsiniz ve bu da yeniden derlenmeyi hızlandıracaktır.

Şahsen, bunu çok yararlı buluyorum çünkü EDA yapı akışımdaki her adımda tüm çıktıları tahmin edemiyorum. Ayrıca, bakım maliyeti nedeniyle her yapı adımının tüm çıktılarını tahmin etmeye çalışmak istiyorum.

Eminim, Greg'in de belirttiği gibi Decider() işlevinin daha sinsi olduğunu, ancak kişisel olarak zaman damgası dosyalarının olmasını isterim.

0

SConstruct dosyanızda dosyanızı temsil eden Düğüm ayıklayın. Bundan sonra Düğümünü kullanabilmeniz gerekir.always_build (true), bunun yapıldığından emin olmak için, bu durumun bağımlılarının da yeniden oluşturulmasını zorlayacağını düşünüyorum.

+0

teşekkürler ama hep yapmak istemiyorum (Bu nadir ama kötü gerekli görev) ve ben SConstruct/SConscript dosyalarını değiştirmek istemiyoruz, sadece bir yol ister Belirli bir dosyayı veya dosyaları ve bağımlılarını yeniden oluşturmaya zorlamak için bir kerelik yeniden oluşturma. –