में उपयोग की गई फ़ाइल की सामग्री को अद्यतन करने के लिए कैसे बनाएं, जो कि निर्माण का हिस्सा है, की सामग्री को अद्यतन करने के लिए उचित SCONS विधि क्या है?SCONS को
मैं काफी बड़ी परियोजना बनाने के लिए SCONS का उपयोग करता हूं। लेकिन एक सरल प्रश्न के लिए, मान लें कि यह इस तरह दिखता है:
env.Program("foo", ["foo.c", "version.c"])
कुछ निर्माण शर्तों के तहत, यह नई जानकारी के साथ निर्माण में सीपीपी फ़ाइलों में से एक की सामग्री को अद्यतन करने के लिए आवश्यक है - संस्करण जानकारी वास्तव में। उपर्युक्त उदाहरण में, मुझे "version.c" की सामग्री को संशोधित करने की आवश्यकता होगी। मैंने सोचा कि मैं निम्न उदाहरण के साथ नहीं बल्कि अच्छी तरह से ऐसा कर सकता है:
env.Command(target="version.c", source=[], action=PythonFunctionToUpdateContents)
env.Program("foo", ["foo.c", "version.c"])
PythonFunctionToUpdateContents लक्ष्य का प्रयोग करेंगे [0] फ़ाइल का नाम, उसे खोलें, कुछ विशिष्ट पाठ के लिए देखो, यह बदलने के लिए, परिवर्तन लिखने के रूप में एक ही फाइल पर वापस। दुर्भाग्यवश, उपर्युक्त नमूना काम नहीं करता है। SCONS स्वचालित रूप से इसे बनाने से पहले एक लक्षित फ़ाइल हटा देता है, इसलिए इसे अपडेट करने से पहले मेरी "version.c" फ़ाइल हटा दी गई।
मैंने env.Command() कॉल में एक ही फ़ाइल में लक्ष्य और स्रोत सेट करने का प्रयास किया, लेकिन यह केवल एक निर्भरता चक्र बनाता है।
मुझे पता है कि मैं SCONS को एंटीयर संस्करण.c फ़ाइल उत्पन्न करके इसे हल कर सकता हूं, लेकिन यह उपयुक्त नहीं है क्योंकि संस्करण.c में बहुत से अन्य कोड हैं जो सामान्य विकास के हिस्से के रूप में बदल सकते हैं।
उदाहरण बहुत आसान था, शायद। मेरा "env.Program()" कॉल वास्तव में एक तृतीय-पक्ष निर्माण प्रक्रिया के लिए एक बाहरी कॉल है जो SCONS आधारित नहीं है। तो मैं अपनी प्रक्रिया को बंद करने से पहले फ़ाइल को संशोधित करने की कोशिश कर रहा हूं। मैं सहमत हूं - फ़ाइल को संशोधित करना एक अच्छा विचार नहीं है। लेकिन निर्माण प्रक्रिया के उस हिस्से पर मेरा नियंत्रण नहीं है। –
वही सिद्धांत लागू होता है - आपके पास एक फ़ाइल है जिसे आप नियंत्रित करते हैं जो बाह्य निर्माण प्रक्रिया में इनपुट का टेम्पलेट है। बाहरी प्रक्रिया को लात मारने से पहले आप अपने टेम्पलेट की एक संशोधित प्रति प्रासंगिक निर्देशिका में बनाते हैं। ऐसा विफल होने पर, आप हमेशा तीसरे पक्ष के निर्माण की एक पूरी प्रति बना सकते हैं (व्यावहारिक नहीं हो सकता है) और उस प्रतिलिपि में फ़ाइलों को संशोधित कर सकते हैं। – richq