2011-11-11 6 views
13

के साथ मिश्रण सी और सी ++ हम मुख्य रूप से C में एक आवेदन लिखते हैं लेकिन कुछ उप-मॉड्यूल C++ (लिनक्स पर) में लिखे गए हैं। समस्या यह है कि कुछ उपनिर्देशिकाओं और gcc के लिए g++ का उपयोग करने के लिए CMakeLists.txt फ़ाइलों को कैसे लिखना है।सीएमकेई

उत्तर

13

संकलक और लिंकर आमतौर पर फ़ाइल एक्सटेंशन द्वारा निर्धारित किया जाता है यदि अन्यथा सेट नहीं किया गया हो। इसलिए जब तक फ़ाइल के अंत ठीक होते हैं, तब तक आपका कोड संकलित और सही कंपाइलर से जुड़ा होता है।

एक तरफ ध्यान दें, यदि आप सी और सी ++ मिश्रण करते हैं, तो सही बाहरी सी घोषणाएं करना याद रखें।

+2

"अन्यथा सेट नहीं होने पर" चुना गया है, यानी 'CMakeLists.txt' के शीर्ष पर, 'प्रोजेक्ट (myproject)' का उपयोग करने के बजाय 'परियोजना (myproject सी)'। – congusbongus

1

जी ++ और जीसीसी के बीच का अंतर मूल रूप से है कि g ++ passes -lstdC++ लिंकर को पास करता है। सी ++ मानक पुस्तकालय को सी ++ मॉड्यूल की स्पष्ट निर्भरता के रूप में जोड़ें।

स्पष्ट होने के लिए, जीसीसी सी ++ कोड संकलित कर सकता है। इस संबंध में जीसीसी और जी ++ समान हैं। अंतर केवल तभी होता है जब g ++ का उपयोग करते समय आपको libstdC++ से लिंक करने के लिए संकलक को स्पष्ट रूप से बताना नहीं है।

+0

धन्यवाद, मैंने प्रश्न को फिर से लिखा है। यह हिस्सा ठीक है, लेकिन मैं जानना चाहता हूं कि विशिष्ट उप-निर्देशिकाओं के लिए जीसीसी/जी ++ कैसे निर्दिष्ट करें। – Cartesius00

+0

कुछ उप निर्देशिकाओं पर g ++ का उपयोग करने की क्या आवश्यकता है यदि आप केवल जीसीसी का उपयोग कर सकते हैं और जब आवश्यक हो तो libstdC++ पर स्पष्ट रूप से निर्भर हो सकते हैं? – bames53

+0

हमें कुछ मौजूदा सी और सी ++ कोड मिश्रण करना होगा। – Cartesius00

4

आप अपनी स्रोत फ़ाइलों की LANGUAGE संपत्ति को "CXX" पर सेट कर सकते हैं। documentation देखें।

5

सीएमके स्वचालित रूप से ऐसा करता है। आप स्वतंत्र रूप से फ़ाइलों के दोनों प्रकार के मिश्रित कर सकते हैं अपने CMakeLists.txt फ़ाइल में:

. . . 
add_executable(
    my_program 
    code.cpp 
    more_code.c 
) 

मैं यह सब समय करते हैं और यह सिर्फ काम करता है।

+2

ध्यान दें कि आपको सी-हेडर गार्ड की आवश्यकता है। तो code.cpp में आप 'बाहरी "सी" {#include "more_code.h"} कहेंगे – Unapiedra

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