2011-08-17 7 views
8

मैं उन स्कॉन्स में एक कमांड चलाने के लिए चाहता हूं जिसमें कोई इनपुट/आउटपुट फ़ाइलें नहीं हैं (वास्तव में इनपुट और आउटपुट एक ही फ़ाइल हैं)। फिलहाल मैं इसे सबप्रोसेस के साथ मैन्युअल रूप से चला रहा हूं। पोपेन लेकिन क्या ऐसा करने का एक और स्कॉन्सी तरीका है?निर्भरताओं के बिना SCons में एक आदेश चलाएं

उत्तर

13

आप पॉपन के माध्यम से जो भी बाहरी आदेश चलाते हैं, उसे चलाने के लिए Command फ़ंक्शन का उपयोग कर सकते हैं, और आप AlwaysBuild फ़ंक्शन का उपयोग करके यह सुनिश्चित कर सकते हैं कि आपका आदेश हमेशा चल रहा है भले ही लक्ष्य फ़ाइल मौजूद हो। स्कैन निर्भरता चक्र पसंद नहीं करते हैं, इसलिए स्रोत सूची को खाली छोड़ दें।

myfile = env.Command('myfile.out', [], 'echo Hello world > $TARGETS') 
env.AlwaysBuild(myfile) 

SCons विकि भी जो यह आसान सरल आदेशों का एक बहुत स्थापित करने के लिए बनाता है PhonyTargets के लिए एक नुस्खा है।

+0

यदि 'myfile.out' बनाने के लिए पहले से ही कोई नियम है तो यह शिकायत करता है कि लक्ष्य बनाने के कई तरीके हैं। मैं फ़ाइल बनाने के लिए एक नियम बनाना चाहता हूं, और दूसरा इसे संशोधित करने के लिए चाहता हूं। –

+0

मुझे लगता है कि एक लक्ष्य के लिए दो नियम होने का एक बुरा विचार है। लक्ष्य मौजूद होने पर स्कैन कैसे जानते हैं कि 'संशोधित' नियम लागू किया गया है या नहीं? यदि आपके पास दो लक्ष्य हैं, तो प्रत्येक नियम के लिए यह बेहतर काम करेगा। या एक नियम है जो 'निर्माण' और 'संशोधित' दोनों कार्य करता है। –

+0

स्कॉन्स डॉक्स पर ध्यान दें जहां यह कहता है 'AlwaysBuild' एक भ्रामक नाम है। वास्तव में कमांड जारी करने से पहले कुछ नियम स्कोन मूल्यांकन करते हैं। –

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