2010-10-08 12 views
5

Dosyaları scons içinde oluşturulduğunda denetlemeye çalışırken deliriyorum. Bir Poem oluşturucu ile sadece .txt dosya alıp karşılık gelen bir .eectxt dosyasında küçük harfe dönüştüren çok basit bir örnek yapı ağacım var (aşağıya bakın).Özel oluşturucum olduğunda dosyaları oluşturmak için scons ne tetikler?

SConstruct ve SConscript dosyalarında, 3 .txt dosyasının bağımlılıklarını bildiriyorum.

Ancak bunları varsayılan yapının içine koyduğunu anlayamıyorum!

sconstest/ 
    SConstruct 
    tiger.txt 
    src/ 
     SConscript 
     hope.txt 
     jabberwocky.txt 

nerede * .txt dosyaları şiirler ve benim SConstruct ve SConscript şu şekilde görünür:

SConstruct:

env = Environment(); 

def eecummings(target, source, env): 
    if (len(target) == 1 and len(source) == 1): 
    with open(str(source[0]), 'r') as fin: 
     with open(str(target[0]), 'w') as fout: 
      for line in fin: 
       fout.write(line.lower()); 
    return None 

env['BUILDERS']['Poem'] = Builder(action=eecummings, suffix='.eectxt', src_suffix='.txt'); 

Export('env'); 
poems = SConscript('src/SConscript'); 
tigerPoem = env.Poem('tiger.txt'); 

src/SConscript:

Import('env'); 

input = ['jabberwocky.txt', 'hope.txt']; 
output = [env.Poem(x) for x in input]; 
Return('output'); 

Ne yapmak istediği .eectxt dosyalarının bağımlılığını ilgilidan bildirmektirdosyaları, ancak değil onları açık bir şekilde onlar SConstruct dosyasında Default() yapı içine koymak sürece, ya da ben açıkça komut satırında bunları isteyin.

Bunu nasıl yapabilirim?

cevap

1

Varsayılan olarak, bir dizin içinde bulunan tüm dosyalara ve/veya hedeflere bağlıdır. Yani çalışan:

scons 

sonra geçerli dizindeki bütün hedefleri inşa edecek.

0

İstediğimi nasıl yapacağımı anladım, ama neden hala bu şekilde yapmam gerektiğini anlamıyorum. Bunu açıklayan ilk iyi yanıtın kabulü.

İşte eklerseniz kök SConstruct dosyasına aşağıdaki işleri budur: eğer öyleyse,

env.Ignore('.', tigerPoem); 
env.Ignore('src', poems); 
env.Alias('poems', [tigerPoem]+poems); 

Bu varsayılan hedeften 3 şiir yok sayar ve ardından "şiir" takma adlı hedefler olarak ekler scons'u çalıştırıyorum hiçbir şey oluşturmaz, ancak scons poems çalıştırırsam dosyaları oluşturur.

Bu neden çalışıyor? Neden env.Poem(...) numaralı telefonun aranması varsayılan hedeflere bir şey ekliyor?

İlgili konular