2009-09-30 10 views
7

स्कैन फ़ाइल मोड के बजाए MD5 हैश का उपयोग यह निर्धारित करने के लिए करता है कि निर्भरता बनाने की आवश्यकता है या नहीं।स्कैन में "स्पर्श" के बराबर?

मैं चाहता हूं कि यह डिफ़ॉल्ट व्यवहार हो। लेकिन क्या यह किसी भी फाइल को अलग करने के लिए फाइल को संपादित करने के अलावा, किसी विशेष फ़ाइल को पुराना ("स्पर्श" के बराबर) मानने के लिए मजबूर करने का कोई तरीका है?

संपादित करें: उपयोग के मामले:

बाइनरी फ़ाइल एफ किसी कारण फ़ाइल जी के लिए एक उपकरण एक्स का उपयोग कर किसी अन्य फ़ाइल जी बनाने के लिए बदल गया है (यह दूषित हो गया, या मैं इसे संपादित) या उपकरण एक्स प्रयोग किया जाता है बदल गया है, और मैं फ़ाइल जी और इसके सब कुछ नीचे की ओर फिर से बनाना चाहता हूं।

संपादित करें: यह कभी-कभी उपयोग के लिए होता है। मैं नहीं चाहता कि यह हमेशा होता है, केवल कुछ ही बार जब मैं इसके लिए पूछता हूं। इसके अलावा मुझे समय से पहले विशेष फ़ाइल नहीं पता हो सकता है। इस कारण से मैं एक विशेष फ़ाइल बनाने के लिए SConscript/SConstruct फ़ाइलों को संशोधित नहीं करना चाहता हूं।

scons {something to specify file foobar.h} 

और उस SCons, foobar.h के आधार पर सभी फाइलों को निर्माण करने के लिए है, जबकि सिर्फ scons टाइपिंग नियमित MD5 का उपयोग कर निर्माण करना होगा मजबूर होना पड़ा निर्भरता जांच के लिए हैश: क्या मैं चाहूँगा एक कमांड प्रॉम्प्ट पर ऐसा करने के लिए है । मुझे इस समय (कस्टम डिकिडर, मुझे लगता है) की अनुमति देने के लिए समय से पहले स्कॉन्स्क्रिप्ट/स्कोनस्ट्रक्चर फ़ाइलों को संपादित करने में कोई फर्क नहीं पड़ता है, अगर ऐसा करने का कोई तरीका है जो निर्माण के समय में काफी वृद्धि नहीं करता है।

उत्तर

4

क्या आपने स्कैन के - इंटरएक्टिव विकल्प पर एक नज़र डाली है, वहां आप विशिष्ट लक्ष्यों को साफ और निर्माण कर सकते हैं।

man page describing this.

+0

हुह, मैं कभी भी --इंटरएक्टिव के बारे में नहीं जानता था, जो मुझे कुछ समय बचाएगा/बार-बार बनाता है। धन्यवाद! मुझे लगता है कि मैं इसे जो भी चाहता था उसके लिए उपयोग कर सकता हूं। –

+0

ध्यान दें कि यदि आप वास्तव में संकलन के लिए नई कॉल ट्रिगर करना चाहते हैं तो आपको स्कैन '--इंटरएक्टिव - नो-कैश' करने की आवश्यकता है अन्यथा इंटरैक्टिव कमांड 'बिल्ड' केवल कैश से चुनें और आपको कंपाइलर का अभ्यास नहीं करेगा। –

1

मुझे नहीं लगता कि सीधे ऐसा करने का कोई तरीका है। यदि प्रश्न में स्रोत फ़ाइल में एक स्पष्ट आउटपुट है, जैसे test.otest.c से बनाया गया है, तो test.o को निकालने से स्रोत फ़ाइल का पुन: संकलन होगा।

यदि आप test.h को स्पर्श करना चाहते हैं, जो कई अलग-अलग स्रोत फ़ाइलों से शामिल है, तो आप यह सुनिश्चित करने के लिए अपनी पूरी परियोजना को साफ करने से बेहतर हो सकते हैं कि सब कुछ पुनर्निर्मित हो जाए।

ऐसा कहकर, आप Decider() function के बारे में पढ़ना चाहेंगे जो आपको यह चुनने देता है कि फ़ाइल निर्भरताओं का इलाज कैसे किया जाएगा। आप अपनी प्रोजेक्ट में विशेष फ़ाइलों के लिए एक कस्टम डिकिडर फ़ंक्शन भी चुन सकते हैं, इसलिए यदि आपके पास कुछ वैश्विक शीर्षलेख फ़ाइल है जो आप touch और पुनर्निर्माण करने में सक्षम होना चाहते हैं, तो आप ऐसा कर सकते हैं।

अपडेट: अपने नवीनतम प्रश्न का उत्तर देने के लिए, बस फ़ाइल को हटाएं जी स्कैन अगली बार आपके द्वारा एक्स चलाने के द्वारा इसे F से फिर से बना देगा।

0

मैं एक पूर्ण तिथि के साथ एक डमी लक्ष्य फ़ाइल बनाता हूं जो घंटे और दूसरे तक पूरी तरह से होता है। तब मेरे पास अन्य कदम इस डमी लक्ष्य फ़ाइल पर निर्भर हैं। जब भी बिल्ड चरण recompiles हर बार md5 मान बदल जाएगा और बाद के चरणों को पुन: संकलित करने का कारण बन जाएगा। वैकल्पिक रूप से आप डमी लक्ष्य को हटा सकते हैं और वह भी एक पुन: संकलन को ढंक देगा।

व्यक्तिगत रूप से, मुझे यह बहुत उपयोगी लगता है क्योंकि मैं अपने ईडीए निर्माण प्रवाह में प्रत्येक चरण से सभी आउटपुट की भविष्यवाणी नहीं कर सकता। न ही मैं रखरखाव लागत के कारण हर निर्माण चरण के सभी आउटपुट की भविष्यवाणी करने की कोशिश करना चाहता हूं।

मुझे यकीन है कि ग्रेडर ने उल्लेख किया है कि दिसम्बर() फ़ंक्शन, अधिक स्कैन-जैसा है, लेकिन मुझे व्यक्तिगत रूप से टाइमस्टैम्प फाइलें पसंद हैं।

0

आपकी स्कैनस्ट्रक्चर फ़ाइल में नोड निकालने वाली आपकी फ़ाइल का प्रतिनिधित्व करती है। इसके बाद आप नोड का उपयोग करने में सक्षम होना चाहिए।हमेशा_बिल्ड (सत्य) यह सुनिश्चित करने के लिए कि यह बनाया गया है, मुझे लगता है कि इससे इसके आश्रितों को भी पुनर्निर्मित किया जाएगा।

+0

धन्यवाद, लेकिन मैं नहीं चाहता कि यह हमेशा क्या करना चाहते हैं (यह एक दुर्लभ लेकिन बुरी तरह से की जरूरत है काम है), और मैं SConstruct/SConscript फ़ाइलों को संशोधित नहीं करना चाहता, मैं सिर्फ का एक तरीका चाहते हैं किसी विशेष फ़ाइल या फ़ाइलों और उसके आश्रितों को पुनर्निर्मित करने के लिए मजबूर करने के लिए एक बार पुनर्निर्माण करना। –

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