2016-04-04 35 views
0

Her dosya derlendikten sonra bazı günlük dosyaları oluşturdum.SCons Yoksay işlevi çalışmıyor

Bu dosyayı SCILL'leri, bu dosyayı derlemek için kullandığım oluşturucuya eklenmiş bir yayımlayıcıyı kullanarak bildiriyorum.

Ne yazık ki, her yapıdan sonra boş günlük dosyalarını sildiğim için günlük dosyaları eksik olduğu için SCON kaynak dosyaları yeniden derler.

Bu 'yan etki' dosyalarını SCons Ignore işlevini kullanarak yok saymak isterim. Benim yayıcı olarak

Böyle bir şey yapıyorum: Bir not olarak hep oluşturucu yalnızca bir dosya geçmesi

def compiler_emitter(target, source, env): 
target.append(env.File(source[0].name.split('.')[0] + env['ERRSUFFIX']))  
env.Ignore(source[0], target[1])  
return target, source 

.

Benim durumumda Yoksay işlevi çalışmıyor.

Bu sorunu 'SCons tarzında' çözmenin en iyi yolu nedir?

+0

Ben öncelikle Yayınlayıcısındaki ek günlük/hata dosyaları eklemek anlamak, ancak daha sonra bunları "görmezden" istemiyoruz. Yapımınız için önemli değilse, Vericiyi onlara anlatmayın. Bu benim yaklaşımım en azından ... – dirkbaechle

cevap

1

deneyin env.SideEffect (kullanarak) yerine es:

SideEffect (side_effect, hedef), env.SideEffect (side_effect, hedef)

binanın bir yan etkisi olarak side_effect olduğuna hedef. Hem side_effect hem de hedef bir liste, bir dosya adı veya bir düğüm olabilir. Bir yan etkisi, başka hedefler oluşturma yan etkisi olarak oluşturulan veya güncelleştirilen bir hedef dosyadır. Örneğin, bir Windows PDB dosyası , statik kitaplık için .obj dosyalarının oluşturulmasının bir yan etkisi olarak oluşturulmuştur ve çeşitli günlük dosyaları, çeşitli TeX komutlarının yan etkileri olarak güncelleştirilir. Hedef, birden çok derleme komutunun bir yan etkisi ise, scons, bir seferde yalnızca bir komut kümesinin yürütülmesini sağlayacaktır. Sonuç olarak, bu yöntemi yalnızca birden çok derleme komutlarının sonucu olarak oluşturulan yan etki hedefleri için kullanmanız gerekir.

Birden çok derleme komutu aynı yan etki dosyasını güncelleyebildiğinden, varsayılan olarak hedef -c seçeneğiyle kaldırıldığında side_effect hedefi otomatik olarak kaldırılmaz. (Ancak, side_effect öğesinin, çalıştığı dizini temizlemenin bir parçası olarak kaldırılabileceğini unutmayın.) Belirli bir hedef temizlendiğinde side_effect öğesinin temizlendiğinden emin olmak istiyorsanız, bu 'u açıkça belirtmeniz gerekir. Temiz veya env.Clean işlevi.

http://scons.org/doc/production/HTML/scons-man.html