2010-10-08 10 views
5

स्कैन में फ़ाइलों को बनाए जाने पर मैं नियंत्रण करने की कोशिश कर रहा पागल हो रहा हूं। मेरे पास Poem बिल्डर के साथ एक बहुत ही सरल उदाहरण है (नीचे देखें), .txt फ़ाइल लेता है और इसे .eectxt फ़ाइल में कम मामले में परिवर्तित करता है।जब मेरे पास कस्टम निर्माता है तो फाइल बनाने के लिए स्कैन ट्रिगर करता है?

मेरी स्कैनस्ट्रक्चर और स्कॉन्स्क्रिप्ट फ़ाइलों में, मैं 3 .txt फ़ाइलों की निर्भरता घोषित करता हूं।

लेकिन मैं यह नहीं समझ सकता कि इन्हें डिफ़ॉल्ट निर्माण में क्या रखा जा रहा है!

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

जहां * .txt फ़ाइलें कविताएं हैं और मेरे SConstruct और SConscript इस तरह दिखेगा:

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'); 

क्या मैं करना चाहते हैं संबंधितकी निर्भरता घोषित करना हैफाइलें, लेकिन उन्हें तब तक नहीं बनाया जा सकता जब तक कि मैं उन्हें स्पष्ट रूप से स्कैनस्ट्रक्चर फ़ाइल में Default() में नहीं डालता, या मैं उन्हें कमांड लाइन पर स्पष्ट रूप से अनुरोध करता हूं।

मैं यह कैसे कर सकता हूं?

उत्तर

1

डिफ़ॉल्ट रूप से, एक निर्देशिका उन सभी फ़ाइलों और/या लक्ष्यों पर निर्भर करती है जो इसमें रहते हैं। तो चल रहा है:

scons 

तो मौजूदा निर्देशिका के अंतर्गत सभी लक्ष्यों का निर्माण करेंगे।

0

मुझे पता चला कि मैं क्या चाहता हूं, लेकिन मुझे अभी भी समझ में नहीं आता कि मुझे ऐसा क्यों करना है। पहले सभ्य उत्तर की स्वीकृति जो इसे समझाती है।

यहाँ, क्या काम करता है अगर मैं जोड़ने जड़ SConstruct फ़ाइल में निम्नलिखित है:

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

यह डिफ़ॉल्ट लक्ष्य से 3 कविताओं पर ध्यान नहीं देता, और फिर उन्हें करने के लिए "कविता" एलियास लक्ष्य के रूप में कहते हैं, इसलिए यदि मैं scons चलाता हूं यह कुछ भी नहीं बनाता है, लेकिन अगर मैं scons poems चलाता हूं तो यह फाइल बनाता है।

यह क्यों काम करता है? env.Poem(...) कॉलिंग डिफ़ॉल्ट लक्ष्य में कुछ क्यों जोड़ती है?

संबंधित मुद्दे

 संबंधित मुद्दे