2010-01-11 11 views
32

मैं ग्रहण आईडीई का उपयोग कर सी/सी ++ विकसित करता हूं। ग्रहण एक मेकफ़ाइल भी उत्पन्न करता है जिसे मैं संपादित नहीं करना चाहता क्योंकि यह केवल ओवरराइट किया जाएगा।उत्तीर्ण करने के लिए सी/सी ++ # डिफाईन्स

मैं हडसन के अंदर रात के निर्माण के लिए उस मेकफ़ाइल का उपयोग करना चाहता हूं।

मैं मेडेफ़ाइल में आईडीई की प्रोजेक्ट फ़ाइल में किए गए # डिफाईन्स कैसे पास करूं? (और क्यों ग्रहण नहीं करता है उन्हें पहले से ही उत्पन्न makefile में शामिल हैं?)

मैं वास्तव में इस एक बार पता लगा, तो गलती से इसे अधिलेखित कर दिया था :-(लेकिन कम से कम मुझे पता है कि यह किया जा सकता है ...

उत्तर

30

आप चल रहे हैं कमांड लाइन से करते हैं, तो

make CPPFLAGS=-DFOO 

का उपयोग जो सभी संकलन करने के लिए -DFOO जोड़ देगा। मेक मैनुअल में CFLAGS, CXXFLAGS, LDFLAGS भी देखें।

+1

ऐसा लगता है कि यह सीपीपीएफएलजीएस को ओवरराइड करता है जिसे मैं सेट कर रहा हूं makefile। क्या इस ध्वज को CPPFLAGS में जोड़ने का कोई तरीका है? – matec

+5

@matec - पर्यावरण चर से हाँ परिभाषाओं को प्राथमिकता है। आप अधिक झंडे जोड़ने के लिए अपने मेकफ़ाइल में 'CPPFLAGS + = -DBAR' का उपयोग कर सकते हैं –

1

जीसीसी उपयोग के लिए परिभाषित डी।

ओपी कि वह मेकअप में परिभाषित करने और इसे जीसीसी तक पहुंचाया है पारित करने के लिए चाहता है नीचे टिप्पणी की।

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

+0

हम में से एक ने गलत सवाल का जवाब दिया है। मुझे लगता है * उसके पास कुछ '# परिभाषित' के साथ एक सी ++ हैडर है, और निर्णय लेने के लिए उनका उपयोग करना चाहता है। यदि आप सी ++ संकलन के दौरान प्रीप्रोसेसर द्वारा उन्हें समझने के लिए कुछ चर बनाने में सक्षम हैं और सुझाव देना चाहते हैं तो सुझाव सही है। – dmckee

+0

शायद मैं पर्याप्त स्पष्ट नहीं था, क्षमा करें। मैं #defines बनाने के लिए पास करना चाहता हूं, जो जीसीसी को कॉल करते समय उनका उपयोग करेगा। तो, कुछ 'मेक-डीमैक्सवेल = 42' – Mawg

+0

हम्म, मुझे पता है कि मैंने इसे पहले प्रबंधित किया है, लेकिन भूल जाओ कि कैसे ... मैं सहमत हूं कि मेकफ़ाइल में परिभाषित करने के लिए ग्रहण करें। मैं makfile लाइनों 'शामिल करें ../makefile.init ' और ' शामिल करें ../ makefile.defs' लेकिन ये फ़ाइलें मौजूद नहीं हैं (!)। ग्रहण सीडीटी लोगों ने गेंद को गिरा दिया है क्योंकि जैन्टी से कर्मिक तक अपग्रेड करने के बाद अब पैकेज नहीं है। सीडीटी को स्थापित करने के तरीके के बारे में विभिन्न समाधान प्रदान करने वाले एक बड़े या वेब पेज हैं। शायद मैंने चुना "लगभग काम करता है"। यही कहना है, सीडीटी के भीतर से काम करता है, लेकिन 'मेक' के साथ बाहरी रूप से नहीं? – Mawg

2

आप हेडर को शामिल करने और मेकफ़ाइल खंड लिखने के लिए एक छोटा प्रोग्राम लिख सकते हैं जिसे आप include in the main makefile (जीएनयू बनाने की आवश्यकता है) लिखते हैं।

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

+0

हां, लेकिन बात यह है कि मुझे पता है कि मैंने हैकरी का उपयोग किए बिना इसे किया था। हां, मैं अब याद नहीं कर सकता। – Mawg

+0

नीचे टिप्पणी देखें। हो सकता है कि जौन्टी/कॉस्मिक सीडीटी फियास्को का मतलब है कि मैं जो भी पहले किया था उसे दोहराना नहीं कर सकता। मेकफ़ाइल में सुझाव देने और पढ़ने के बाद मुझे ऐसा करना पड़ सकता है, इसे मालिश करें और इसे किसी अन्य मेकफ़ाइल पर लिखें। बीटीडब्ल्यू, टीएच # डिफाइन्स जो मैं उपयोग करना चाहता हूं वे बिल्कुल ग्रहण में उपयोग नहीं किए गए हैं (उदाहरण के लिए, मैं स्वैप -डेटपुट = फ़ाइल के लिए -डेटपुट = कंसोल, आदि) – Mawg

1

यदि आप autotools का उपयोग कर रहे हैं तो अन्य विकल्प 2 निर्देशिका 'bin/debug' और 'bin/release' होना चाहिए।

# Simple bootstrap script. 

# Remove previously generated filed and call autoreconf. 
# At the end configure 2 separate builds. 
echo "Setting up Debug configuration: bin/debug" 
../../configure CXXFLAGS="-g3 -O0 -DDEBUG=1" 
echo "Setting up Release configuration: bin/release" 
cd bin/release/ 
../../configure CXXFLAGS="-O2" 

सेटअप ग्रहण। परियोजना के गुण खोलें (परियोजना> गुण> C/C++ बनाएँ-> बिल्डर सेटिंग) और बिल्ड स्थान- सेट>

${workspace_loc:/helloworld/bin/debug} 

लिए निर्देशिका का निर्माण कार्यस्थान में अपने प्रोजेक्ट की निर्देशिका रिश्तेदार के साथ 'HelloWorld' की जगह (या आप एक पूर्ण पथ $ {/ abs/path/debug} की आपूर्ति कर सकते हैं)। पथ के अंत में "रिलीज" के साथ "/ डीबग" को प्रतिस्थापित करते हुए रिलीज कॉन्फ़िगरेशन के साथ एक ही काम करें।

यह विधि डिस्क स्थान की बर्बादी की तरह प्रतीत होती है, लेकिन पूरी तरह से अलग बिल्ड प्राप्त करने के लिए एक वैध विकल्प है।

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