2012-04-26 11 views
13

मैं का एक CFLAGS पर देख रहा हूँ। -डी ध्वज क्या करता है? मैं उस मैन पेज पर देखता हूं किg ++ -D ध्वज क्या करता है? एक Makefile में</p> <pre><code>CFLAGS=-g -w -D LINUX -O3 -fpermissive </code></pre> <p>-

-D name 
    Predefine name as a macro, with definition 1. 

लेकिन मुझे नहीं पता कि इसकी व्याख्या कैसे करें। मेरी व्याख्या है ... यह लिनक्स पर्यावरण में होने पर LINUX को मैक्रो बना रहा है और केवल -03 और -ppermissive कर रहा है। क्या वह सही है? यदि नहीं, तो क्या? किसी भी मदद के लिए धन्यवाद

+3

अक्सर, '-D' निम्नलिखित (परिभाषित) नाम पर चिपकाया जाता है, उदा। '-DLINUX' या' -DFOO = BAR' –

उत्तर

19

यह संकलित किए जा रहे फ़ाइल के स्रोत कोड में #define LINUX 1 स्टेटमेंट जोड़ने के बराबर है। इसका अन्य संकलन झंडे पर कोई प्रभाव नहीं पड़ता है। इसका कारण यह है कि कोड में #ifdef कथन सक्षम करने का यह एक आसान तरीका है। तो अगर आप कोड हो सकता है का कहना है कि:

#ifdef LINUX 
    foo; 
#endif 

यह केवल सक्षम हो जाएगा अगर उस मैक्रो सक्षम किया गया है जो आप -D ध्वज के साथ नियंत्रित कर सकते हैं। इसलिए स्रोत फ़ाइल को संपादित किए बिना संकलन समय पर सशर्त संकलन विवरण सक्षम/अक्षम करने का यह एक आसान तरीका है।

+0

मैं +1 करूंगा, लेकिन व्याख्या केवल एक बिंदु तक सही है। '-D' ध्वज निम्नलिखित झंडे को प्रभावित नहीं करता है (उदा। उन्हें सशर्त या कुछ ऐसी पागल बात करना), और यह एक काफी महत्वपूर्ण भेद है। – jpm

+0

@jpm यह एक अच्छा मुद्दा है कि मैंने इस सवाल का अर्थ नहीं उठाया था जब मैंने इसे पहली बार पढ़ा था, लेकिन अब मुझे लगता है कि आप सही हैं। मैंने उस बिंदु को स्पष्ट करने के लिए अपना जवाब संपादित किया। –

3

-O3 के साथ इसका कोई संबंध नहीं है। असल में, इसका मतलब है

#define LINUX 1 

संकलित फ़ाइल की शुरुआत में।

+0

तो -03 तब क्या करता है? – Sterling

+1

'-O3' संकलक के अनुकूलन स्तर को 3 पर सेट करता है। – jpm

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