2010-06-24 9 views
9

शक्तिशाली की मेरी परिभाषा को अनुकूलित करने की क्षमता है।क्या दृश्य सी ++ जीसीसी के रूप में शक्तिशाली है?

मैं gcc से परिचित हूं मैं एमएसवीसी को आजमाने की कोशिश करता हूं। तो, मैं एमएसवीसी में जीसीसी समकक्ष विकल्पों की खोज कर रहा था। मैं उनमें से कई को खोजने में असमर्थ हूं। > MSVC संकलक विकल्प मानचित्रण गाइड -

है वहाँ जीसीसी के कुछ प्रकार <

Print (on standard error output) the commands executed to run the stages of compilation. 
gcc: -v 
msvc: ??? 

Store the usual “temporary” intermediate files permanently; 
gcc: -save-temps 
msvc: ??? 
  1. डीबगिंग के लिए उत्पादन की तरह

    Stop after the preprocessing stage; do not run the compiler proper. 
    gcc: -E 
    msvc: ??? 
    
    Stop after the stage of compilation proper; do not assemble. 
    gcc: -S 
    msvc: ??? 
    
    Compile or assemble the source files, but do not link. 
    gcc: -c 
    msvc:/c 
    

    उपयोगी नियंत्रित?

  2. gcc Option SummaryCompiler Options Listed by Category से प्रत्येक अनुभाग में अधिक विकल्प सूचीबद्ध करता है। एमएसवीसी में नरक बहुत महत्वपूर्ण और दिलचस्प चीजें गायब हैं। क्या मुझे कुछ याद आ रहा है या एमएसवीसी जीसीसी से वास्तव में कम शक्तिशाली है।
+0

'gcc -v' मामले के लिए, मेरा अनुमान है कि एमएसवीसी कंपाइलर सबकुछ के लिए सिर्फ सादा 'cl' है, और इसमें जीसीसी के रूप में अलग निष्पादन योग्य बाइनरी नहीं है। –

+18

मुझे नहीं लगता कि आप "अधिक कमांड लाइन स्विच" के साथ "अधिक शक्तिशाली" कैसे समझा सकते हैं। –

+0

@ डिडिएर ट्रॉसेट: कंपाइलर: सीसी == cl.exe, assembler: == ml.exe, linker: ld = link.exe के रूप में। अंतर यह है कि cl.exe भी 'gcc' की भूमिका निभा रहा है। – claws

उत्तर

26

एमएसवीसी एक आईडीई है, जीसीसी सिर्फ एक कंपाइलर है। सीएल (एमएसवीसी कंपाइलर) जीसीसी के दृष्टिकोण से वर्णित अधिकांश चरणों को कर सकता है। CL /? सहायता देता है।

उदा।

पूर्व प्रक्रिया stdout करने के लिए:

CL /E 

संकलित लिंक किए बिना:

CL /c 

विधानसभा उत्पन्न (जीसीसी के विपरीत है, हालांकि, इस संकलन को नहीं रोकता है):

CL /Fa 

CL वास्तव में केवल एक संकलक है, यदि आप देखना चाहते हैं कि आईडीई जेनरेट करता है आईडीई में किसी आइटम के लिए प्रॉपर्टी पेजों के कमांड लाइन सेक्शन को देखने के लिए सबसे आसान चीज़ को संकलित और लिंक करने के लिए। CL एक अलग प्रीप्रोसेसर या असेंबलर को कॉल नहीं करता है, हालांकि, देखने के लिए कोई अलग आदेश नहीं हैं।

-save-temps के लिए, आईडीई अलग संकलन करता है और लिंक करता है इसलिए ऑब्जेक्ट फ़ाइलों को संरक्षित किया जाता है। प्री-प्रोसेसर आउटपुट और असेंबलर आउटपुट को संरक्षित करने के लिए आप आईडीई के माध्यम से /P और /Fa सक्षम कर सकते हैं।

gcc और CL अलग हैं लेकिन मैं यह नहीं कहूंगा कि एमएसवीसी की चीजों में "नरक" की कमी है, निश्चित रूप से आउटपुट जो आप ढूंढ रहे हैं।

3

दोनों कंपाइलरों में संशोधन के लिए विकल्पों में काफी कुछ है ... सबकुछ। मुझे संदेह है कि किसी भी विकल्प में मौजूद नहीं है, जो कि पहले स्थान पर करने योग्य नहीं है। अधिकांश "सामान्य" उपयोगकर्ताओं को वैसे भी उन विकल्पों में से अधिकांश के लिए उपयोग नहीं मिलता है।

यदि आप "पावर" या "लचीलापन" के उपाय के रूप में उपलब्ध विकल्पों की संख्या पर पूरी तरह से देख रहे हैं तो आपको शायद जीसीसी को विजेता बनने के लिए मिल जाएगा, क्योंकि जीसीसी विंडोज के अलावा कई प्लेटफॉर्म को संभालता है और उन प्लेटफार्मों में से कई के लिए विशिष्ट विकल्प जिन्हें आप स्पष्ट रूप से एमएसवीसी में नहीं पाएंगे। जीसीसी (अच्छी तरह से, जीसीसी टूलचेन) सी और सी ++ से परे पूरी भाषाओं को भी संकलित करता है; मैंने हाल ही में उद्देश्य-सी के लिए इसका इस्तेमाल किया, उदाहरण के लिए।

संपादित करें: मैं आपके प्रश्न की वैधता पर सवाल पूछने में डीन के साथ हूं। हां, एमएसवीसी (सीएल) में जीसीसी के कई विकल्पों के बराबर विकल्प हैं, लेकिन नहीं, विकल्पों की संख्या का वास्तव में बहुत अधिक मतलब नहीं है।

संक्षेप में: जब तक आप कुछ खास नहीं कर रहे हैं, तो आप विंडोज प्लेटफॉर्म पर एमएसवीसी आसानी से "शक्तिशाली पर्याप्त" पाएंगे कि संभवतः आप किसी भी जीसीसी विकल्पों को याद नहीं करेंगे।

+1

मैं सिर्फ सी/सी ++ पर विचार कर रहा हूं। यहां तक ​​कि अगर मैं तस्वीर से अन्य भाषाओं को हटा देता हूं, तो सी/सी ++ मानकों के विभिन्न संस्करणों की तरह गायब होने वाली बहुत सी चीजें हैं। "किसी भी विकल्प में मौजूद नहीं है, किसी भी विकल्प के लिए एक विकल्प है जो पहले स्थान पर करने योग्य नहीं है"। क्या मेरे विकल्पों में मैंने जो विकल्प सुझाए हैं वे उपयोगी नहीं हैं? क्या वे करने लायक नहीं हैं? – claws

+0

@claws: आपके प्रश्न में बताए गए विकल्प * उपयोगी हैं, और अन्य उत्तरों ने cl.exe समकक्षों को इंगित किया है। और सी/सी ++ मानकों के समर्थन के विभिन्न संस्करण अच्छे होंगे।लेकिन चलो, जीसीसी knobs और सीटी के कुछ ही क्रूर हैं। पिछली बार जब आपने '-fschedule-insns2' के साथ खेला था? –

10

-E के समतुल्य के लिए, cl.exe में /P है (यह "प्रीप्रोकैसिंग चरण के बाद नहीं रोकता" है लेकिन यह प्रीप्रोसेसर आउटपुट को फ़ाइल में आउटपुट करता है, जो काफी हद तक एक ही चीज़ है)।

एस के लिए, यह एक छोटे से murkier है, "संकलन" के बाद से और "कोडांतरण" चरणों आपके द्वारा निर्दिष्ट क्या अन्य विकल्पों के आधार पर कई स्थानों में हो (उदाहरण के लिए, अगर आपके पास पूरे कार्यक्रम अनुकूलन चालू है, तो लिंक कोड तक मशीन कोड उत्पन्न नहीं होता है)।

फॉर-वी, विजुअल सी ++ जीसीसी के समान नहीं है। यह cl.exe (और link.exe) में सीधे संकलन के सभी चरणों को निष्पादित करता है, इसलिए प्रदर्शित करने के लिए "निष्पादित आदेश" नहीं हैं। इसी तरह से -वेव-टेम्पस के लिए: क्योंकि सब कुछ cl.exe और link.exe के अंदर सीधे होता है, केवल "अस्थायी" फ़ाइलें .obj फ़ाइलें होती हैं जो cl.exe उत्पन्न करती हैं और वे हमेशा वैसे भी सहेजी जाती हैं।

दिन के अंत में, जीसीसी एक ओपन सोर्स प्रोजेक्ट है। इसका मतलब है कि किसी भी खुजली के साथ खुजली वाले किसी भी कमांड लाइन विकल्प को अपेक्षाकृत कम प्रतिरोध के साथ जोड़ सकते हैं। विज़ुअल सी ++ के लिए, एक वाणिज्यिक बंद-स्रोत उत्पाद, प्रत्येक विकल्प को व्यवसाय का मामला, डिज़ाइन मीटिंग्स, टेस्ट प्लान आदि की आवश्यकता होती है। Every new feature starts with minus 100 points

+1

+1: यह सहायक पाया। – claws

+3

मुझे संदेह है कि खरोंच के लिए खुजली वाले सभी लोग केवल एक कमांड लाइन विकल्प जोड़ सकते हैं - यह अभी भी एक स्थिर सॉफ्टवेयर प्रोजेक्ट है जो रखरखावकर्ताओं के साथ है जो कोड के पहले से ही जटिल टुकड़े में अनावश्यक जटिलता से बचने की आवश्यकता है। बेशक, चूंकि नए विकल्प * स्थानीय रूप से जोड़े जा सकते हैं, इसलिए यह संभावना है कि अजीब प्रयोग किए जाएंगे जो उपयोगी साबित हो जाएंगे - और यह बाधा को शामिल करने के लिए अवरुद्ध करता है। –

+1

@Eamon: यह शायद सच है। मेरा मुद्दा अधिकतर था कि माइक्रोसॉफ्ट के लिए कमांड लाइन स्विच जोड़ने के लिए यह बहुत कठिन होगा कि उपयोगकर्ता-बेस का केवल एक छोटा सा अंश उपयोगी लगेगा, जबकि जीसीसी के लिए यह इतना नहीं है। –

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