2011-10-09 29 views
6

tarafından oluşturulan dosyalarını dizini dizinine yerleştirmek için SCons dosyalarımı değiştirmeye çalışıyorum. Başlangıçta, VariantDir bir seçenek olabilir, ancak okuduklarımdan ve istediklerimi yapmadıkları örneklerden yola çıkarak bir seçenek olabilir.Build dizinindeki SCons Çıktısı

tüm kaynaklar ve komut dosyalarını yeniden yazmak zorunda kalmadan belli bir dizinde çıktı koymak Scons zorlamak için herhangi bir kolay yolu var mı?

+0

'VariantDir' sorunu ne var? Duplicate = 0' kullanmayı denediniz mi? –

+0

'VariantDir'in kullanımı için tüm ruhunuzu satmak zorundasınız. Yani ya her şeyi 'VariantDir' ya da hiçbir şey yapmak zorunda değilsiniz. Ben ve diğer pek çok kişinin istediği şey, yalnızca ** üretilen ** şeyleri derlemeye koymak ve herşeyi değil. – abergmeier

+0

Bu, yinelenen = 0' değil mi? Belgelerden: Kaynak ağacı çoğaltmak, yinelenen bağımsız değişken 0 (sıfır) olarak ayarlanarak devre dışı bırakılabilir. Bu, scons kaynaklarının src_dir'deki yol dosyalarının isimlerini ve variant_dir içindeki türetilmiş dosyaların yol adlarını kullanarak Builders'ı çağırmasına neden olur. –

cevap

0

Benzer bir hayal kırıklığıyla karşılaştığımda, yedek oluşturucu ekleyen (örneğin "Program" yerine "Exe") bir site_scons ekledim ve yol dizinini yapı dizini ile değiştiren bu oluşturucu için bir yayımlayıcı belirttim. Bu, SCivescripts'ınız boyunca alternatif oluşturucunun kullanımını gerektirir.

Alternatif Çevre alt sınıf ve hedef yeniden yazar kullanmayı ana hedefleri yeniden deneyebilirsiniz. Sonra Ortamınızı varsayılan olarak belirtirsiniz (Scons.Script.DefaultEnvironment veya bunun gibi bir şey). Bu yaklaşım, SConscript'leri sabit tuttu, ancak çok karışıktı ve scons dahili değiştikçe zamanla daha fazla bakım gerektiriyordu.

0

duplicate=0 ile VariantDir çalışmalıdır kullanma.

+0

Bu, derleme komut dosyalarının çoğunu yeniden yazmamı gerektirir. – abergmeier

0

Hedef ya da InstallA'ları hedef çıkışta kullanabilirsiniz. Benim için çalışıyor.

lib = env.SharedLibrary(target = "some_target", source = sources); 
env.InstallAs(target = "folder/output_name.ext", source = lib); 
2

(o hiç bir şey yapmıyordu) bir süre VariantDir ile mücadele sonra tüm alt yapı çıkışları bir paralel 'sonuna kadar neden üst düzey SConscript çağrısında variant_dir parametreyi kullanarak sona erdi ağaç 'inşa: SConscript(['subdirs/SConscript'], variant_dir='build', duplicate=0) My inşa yapısı onlar kaynakta olduğu gibi çıkışlar aynı seviyede inşa/alt subdirs sona çağırmak Bununla vb/alt-altklasörlere, subdirs içinde SConscripts bir hiyerarşi olduğunu.

Bu bir seviye olsa (altklasörlere) yiyor ve yardımcı olmuyor "../build" seçeneğini kullanarak. Çözelti SConstruct aynı düzeyde bir SConscript dosyası var ve ayrıca Force Scons output (exe, obj, lib & dll) to specific build directorySConscript(['SConscript'], variant_dir='build', duplicate=0)

See çağırmak - bu da benzer bir cevap