2010-06-07 10 views
5

वर्तमान में मैं एक लाख-स्लॉट विरासत परियोजना को सुस्त .cmd स्क्रिप्ट से स्कॉन्स तक बंद करने की कोशिश कर रहा हूं। इसके हिस्से वीसी ++ हैं, अन्य डेल्फी हैं। सी ++ टुकड़ों के लिए स्कॉन्स्क्रिप्ट बनाना एक हवा था।मैं स्कैनस्क्रिप्ट निर्माता को निर्देशिका बदलने के लिए कैसे मजबूर कर सकता हूं?

डेल्फी भाग बनाने के लिए मैंने एक बहुत ही सरल निर्माता लिखा है जो यह पता लगाता है कि यह एक प्रोग्राम या लाइब्रेरी प्रोजेक्ट है या नहीं। स्कॉन्स्क्रिप्ट के माध्यम से चेनिंग के बाद बिल्डर को कॉल करना dcc32 $ subdir/project.dpr को कॉल करने के लिए स्कैन बनाता है जो $ subdir की बजाय वर्तमान निर्देशिका में इकाइयों को देखने के लिए dcc32 को गुमराह करता है।

क्या स्कॉन्स्क्रिप्ट में रहने वाले आदेशों को निष्पादित करने से पहले $ subdir दर्ज करने के लिए स्कैन को बताने का कोई तरीका है या क्या मुझे इसे निर्माता के अंदर ठीक करना चाहिए?

अग्रिम धन्यवाद

उत्तर

5

SCons पहले से ही सब-निर्देशिका SConscripts की निर्देशिका करने के लिए बदल जाता है जब उन्हें पढ़, तो ऐसा लगता है कि समस्या वास्तविक बिल्डर में तय किया जाना है जा रहा है।

स्क्रिप्ट को पार्स किए जाने के बाद, और स्कैन बिल्ड कमांड चला रहे हैं, यह शीर्ष-स्तरीय निर्देशिका में रहता है। तब आदेशों को उस शीर्ष-स्तरीय निर्देशिका के सापेक्ष पथ नामों का उपयोग करके जारी किया जाता है। इस व्यवहार को बदलने का तरीका अपने बिल्डर में chdir कीवर्ड का उपयोग करना है।

b = Builder(action='build < ${SOURCE.file} > ${TARGET.file}', 
      chdir=1) 
env = Environment(BUILDERS = {'MyBuild' : b}) 
env.MyBuild('sub/dir/foo.out', 'sub/dir/foo.in') 

आप chdir के उपयोग के नामों बिल्डर के लिए पारित नहीं बदलती .file घटक निर्दिष्ट करने की आवश्यकता यानी वे अभी भी के सापेक्ष हैं:

SCons आदमी पृष्ठ से उदाहरण इस प्रकार है शीर्ष-स्तर निर्देशिका।

+0

यह वही संयोजन है जिसकी मुझे आवश्यकता है। आपके समाधान ने मेरी समस्या तय की। आपका बहुत बहुत धन्यवाद! – Damg

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

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