2011-10-28 11 views
10

क्या बिल्ड श्रृंखला को इस तरह से स्थापित करना संभव है कि टिप्पणियों में कोई भी परिवर्तन (या व्हाइटस्पेस) अनदेखा कर दिया जाए? उदाहरण के लिए जब भी हेडर फ़ाइल में कोई टिप्पणी बदल दी जाती है, तो इसमें शामिल प्रत्येक स्रोत फ़ाइल को फिर से संकलित किया जाता है, भले ही यह पूरी तरह से अनावश्यक हो।सी ++ टिप्पणियों में परिवर्तनों को अनदेखा करने के लिए सेटअप सेटअप

जब प्रीप्रोसेसर संशोधित फ़ाइल से टिप्पणियों को हटाने के साथ किया जाता है, तो निर्माण श्रृंखला पहले जांच सकती है कि आउटपुट वास्तव में बदल गया है या नहीं। यदि नहीं, तो ऐसा कार्य करना चाहिए जैसे फ़ाइल स्वयं नहीं बदली।

मैं विजुअल स्टूडियो 2010 बीटीडब्ल्यू का उपयोग कर रहा हूं।

संपादित करें: @ माइकसेमोर, वीएस के cl.exe में न्यूनतम पुनर्निर्माण के लिए एक स्विच/जीएम है। यह अच्छी तरह से प्रलेखित नहीं है, लेकिन मुझे लगता है कि यह थोड़े से करता है जो मैं पूछ रहा हूं। लेकिन यह एकाधिक कोर का उपयोग करने के लिए/एमपी स्विच के साथ असंगत है। मेरे दोहरे कोर (डब्ल्यू/हाइपरथ्रेडिंग) पर,/जीएम को औसतन 4 इकाइयों में से 3 में से 3 संकलन को छोड़ना होगा। जबकि मुझे यह संदिग्ध लगता है कि यह मामला है, मुझे यह भी यकीन नहीं है कि मूल्यांकन कैसे किया जाए कि/जीएम इसके लायक है या नहीं।

+2

दिलचस्प। आप मूल रूप से एक विस्तारित बिल्ड सिस्टम चाहते हैं जो एक लक्ष्य को संसाधित करता है, फिर परिणाम को मौजूदा फ़ाइल के साथ तुलना करता है, और यदि वे समान हैं तो * ओवर * ओवरराइट नहीं करते हैं। फिर आप प्रीप्रोकैसिंग चरण को एक अलग लक्ष्य में अलग करने के साथ गठबंधन करेंगे, और आप किया जाएगा। एक अच्छी सुविधा होगी! –

+1

मुझे एक अस्पष्ट विचार है कि विजुअल स्टूडियो वैसे भी करता है - मुझे लगता है कि मुझे याद है कि यह "अपरिवर्तनीय परिवर्तनों को अनदेखा" जैसे संदेशों का उत्पादन करता है। मुझसे गलती भी हो सकती है।अन्य बिल्ड प्लेटफार्मों के लिए, आप वही कर सकते हैं जो आप चाहते हैं [ccache] (http://ccache.samba.org/)। –

+0

@ माइकसेमोर: ccache _does not_ टिप्पणियों के बाहर सफेद जगहों के परिवर्तन के लिए पुनर्मूल्यांकन को रोकता है (और ठीक है, आईएमओ) – sehe

उत्तर

0

सं

कैसे संकलक, पता कर सकते हैं कि केवल परिवर्तन आप एक फाइल करने के लिए की गई टिप्पणियों में थे जब तक यह संकलित है कि फाइल?

बाद की फ़ाइलों को फिर से सम्मिलित किया जाना चाहिए क्योंकि निर्भर फ़ाइल बदल गई थी, भले ही परिणामस्वरूप बाइनरी समान थी।

+2

ओपी कह रहा है कि .hpp फ़ाइल में एक टिप्पणी बदलने से सैकड़ों .cpp फ़ाइलों को हेडर में कोई प्रासंगिक परिवर्तन नहीं किया जा सकता है। हां .एचपीपी को फिर से जांच की जरूरत है कि कोई बदलाव आया है, लेकिन जब कोई प्रासंगिक परिवर्तन नहीं हुआ, तो आप उन सभी .cpps को फिर से संकलित करने से बचा सकते हैं। एकमात्र ऐसा समय संभव नहीं होगा जब आप पागल दुर्लभ चीजें करते हैं जैसे कि।/* 'के साथ .hpp को समाप्त करना और फिर फ़ाइल सहित' */'डालना। (सुनिश्चित नहीं है कि आप यह भी कर सकते हैं!) – tenfour

+0

केवल प्रीप्रोसेसिंग और संकलन नहीं करके टिप्पणियों में परिवर्तनों को अनदेखा करना संभव है; यही है [ccache] (http://ccache.samba.org/) करता है। मुझे एक अस्पष्ट विचार है कि विजुअल स्टूडियो कुछ ऐसा ही करता है (मुझे लगता है कि यह कभी-कभी "अप्रासंगिक परिवर्तनों को अनदेखा करने" के आधार पर संदेशों को प्रिंट करता है), लेकिन यह लंबे समय से मैंने इसका उपयोग किया है। –

0

बहुत से अंतर-निर्भरताओं से बचने के लिए कई तकनीकें हैं। आगे की घोषणा का उपयोग करने का प्रयास करें।

आगे की घोषणा का उपयोग करने के साथ आपको केवल उस कोड को संकलित करने की आवश्यकता है जो वास्तव में कोड का उपयोग करता है। स्कॉट मायर्स पुस्तक आपको और बता सकती है। इस विषय पर एक अच्छा कुछ पेज है।

+2

शायद एक टिप्पणी के रूप में बेहतर अनुकूल है, क्योंकि यह किसी भी तरह से प्रश्न का उत्तर नहीं देता है। –

+0

ईसाई - मैं मान रहा था कि वह यह कह रहा था कि एक फ़ाइल को बदलने के लिए अन्य फाइलों का पूरा समूह संकलित करने की आवश्यकता है। –

+4

शायद, लेकिन वास्तविक सवाल पूरी तरह से अलग प्रकृति का है, वैसे भी। निश्चित रूप से आगे की घोषणाएं एक अच्छा विचार हैं, लेकिन सिर्फ उनके प्रश्न का उत्तर नहीं है। –

2

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

स्रोत कोड की संरचना के गहरे ज्ञान (उदाहरण के लिए एक उत्पादन पार्सर) का उपयोग करते हुए स्रोत कोड फ़ाइलों की तुलना करने वाले हमारे SmartDifferencers उपकरण के परिवार के रूप में ऐसे भविष्यवाणी का एक अच्छा अनुमान मौजूद है। विशेष रूप से, स्मार्टडिफ्रेंसर भाषा संरचनाओं में परिवर्तन के संदर्भ में स्रोत कोड में परिवर्तन दिखाएगा (उदाहरण के लिए, पहचानकर्ता, बयान, घोषणाएं, ब्लॉक) और व्यावहारिक संपादन क्रियाएं (सम्मिलित करें, प्रतिस्थापित करें, हटाएं, स्थानांतरित करें, नाम बदलें, नाम बदलें, इत्यादि। ।)। यह लेआउट या टिप्पणियों में रूचि नहीं रखता है (जब तक कि आप इसे मजबूर नहीं करते)। इसलिए SmartDifferencer को यह बताना बहुत आसान है कि स्रोत कोड फ़ाइल ने टिप्पणियों या व्हाइटस्पेस के अलावा कुछ और बदल दिया है या नहीं। SmartDifferencers विभिन्न प्रकार की भाषाओं के लिए मौजूद है।

अब, आप निर्माण प्रणाली को सहयोग करने के लिए कैसे प्राप्त करते हैं? यूनिक्स एक predicate पर ट्रिगर्स बनाओ, लेकिन इस तरह नहीं; यह वास्तव में क्या करता है लक्ष्य की तुलना में फ़ाइल तिथियों की पुनरावृत्ति के आधार पर इकाइयों पर घटनाओं को ट्रिगर करना है। यदि SmartDifferencer एक दिलचस्प अंतर देखता है, तो आप ऐसी फ़ाइल बनाने के द्वारा "बदले गए सिग्नल" फ़ाइल पर निर्भरता रखते हुए इसे नकली बना सकते हैं।

+0

अच्छा, यह जो भी मैं पूछ रहा था उससे भी अधिक है। यह भी बहुत अधिक हो सकता है। कल्पना करें कि "केवल" खाली रेखा डालना: डीबगर को यह कैसे पता होना चाहिए कि उस रेखा के बाद हर ब्रेकपॉइंट एक से बंद है? क्या इस स्मार्टडिफेंसर को वीएस 2010 के साथ एकीकृत करना संभव है? –

+0

ठीक है, डीबगर के मामले में, यह बहुत आसान है। इसमें प्रारंभिक फ़ाइल में लाइन संख्याओं के ब्रेकपॉइंट्स का मैपिंग है। आप मनमानी रेखाएं डालते हैं; आईडीई एक टेबल बनाता है जो कहता है "विरासत रेखा एम पर एन लाइनें डाली गईं"। अब किसी भी विरासत ब्रेकपॉइंट लाइन नंबर को आधुनिक लाइन नंबर पर मैप किया जा सकता है। चाहे आईडीई लंबे समय तक इस तालिका का ट्रैक रख सके, एक और मामला है, लेकिन मैं अपने डीबगिंग सत्रों के दौरान बस इतना करने के लिए एमएस विजुअल स्टूडियो से बहुत प्रभावित हूं। याद रखें कि यह आईडीई के आक्रमणों में कितनी अच्छी तरह से काम करता है। –

+0

"क्या SmartDifferencer VSStudio में एकीकृत है" के संबंध में ... अच्छा, मुझे जवाब नहीं पता, हम उस चरण के आसपास नहीं गए हैं। यह एक उपकरण है जिसे कमांड लाइन से बुलाया जा सकता है, और त्रुटि स्थिति कोड देता है। मेरा मानना ​​है कि VSStudio आपको ऐसा कोई टूल चलाने देगा। चाहे आप बिल्ड प्रक्रिया में जिस तरह से वर्णन कर रहे हैं उसे सम्मिलित कर सकते हैं ... मैंने कभी नहीं देखा है कि MSVisual Studio वास्तव में इन दिनों निर्माण चरणों का प्रबंधन कैसे करता है। धारणा के तहत यह फाइल बनाने की तरह कुछ है (एमएस ने एनएमके नामक कुछ को धक्का देने के लिए उपयोग नहीं किया?) ऐसा लगता है कि यह संभव होना चाहिए। –

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