2010-04-02 5 views
37

लिनक्स और मैक ओएसएक्स को अलग करने के लिए जीसीसी/जी ++ के लिए मैक्रोज़?लिनक्स और मैक ओएसएक्स को अलग करने के लिए जीसीसी/जी ++ के लिए मैक्रोज़?

+0

संभव डुप्लिकेट [? मैं कैसे एक पूर्वप्रक्रमक निर्देश के साथ ओएस जाँच करना] (http://stackoverflow.com/questions/142508/how-do-i-check-os-with-a -प्रप्रोसेसर-निर्देश) –

उत्तर

87

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

$ touch dummy.hxx 
$ cpp -dM ./dummy.hxx 
#define __DBL_MIN_EXP__ (-1021) 
#define __FLT_MIN__ 1.17549435e-38F 
#define __CHAR_BIT__ 8 
#define __WCHAR_MAX__ 2147483647 
#define __DBL_DENORM_MIN__ 4.9406564584124654e-324 
#define __FLT_EVAL_METHOD__ 0 
#define __DBL_MIN_10_EXP__ (-307) 
#define __FINITE_MATH_ONLY__ 0 
#define __SHRT_MAX__ 32767 
#define __LDBL_MAX__ 1.18973149535723176502e+4932L 
#define __UINTMAX_TYPE__ long unsigned int 
#define __linux 1 
#define __unix 1 
#define __linux__ 1 
... 
की
+1

+1 यह एक आकर्षण की तरह काम करता है! मैं यह कैसे नहीं जान सकता! धन्यवाद! – Viet

+1

@ वियत: आपका स्वागत है ... वास्तव में मैं हाल ही में आपके जैसा ही एक समान conundrum में भाग गया। मैं जानना चाहता था कि मशीन के बाइट ऑर्डर को इंगित करने वाला प्री-डिफ़ाइंड मैक्रो था या नहीं। मैंने घंटों और खोज के घंटों के बाद कुछ अस्पष्ट दस्तावेज में इस पर मारा! – themoondothshine

+38

सीपीपी-डीएम/देव/नल भी काम करता है, कोई अतिरिक्त फ़ाइल की आवश्यकता नहीं है। – Barry

11

मैं मंच नाम की तुलना में सुविधा उपलब्धता के लिए परीक्षण करने के इच्छुक हूं। autoconf का उपयोग करने का प्रयास करें।

अन्यथा, यह a comprehensive list of platform defines है।

कंप्यूटर्स, पुस्तकालयों, आर्किटेक्चर और उपकरणों के बारे में परिभाषित करने के लिए check out this page भी।

+1

धन्यवाद लेकिन मैं autoconf से बचें। मैं बस सरल मैक्रोज़ का उपयोग करना चाहता हूँ। "Predef" लिंक के लिए – Viet

+1

+1। "Predef" लिंक के लिए – noamtm

+0

+1। विकी में एक स्तर अधिक उच्च परिभाषित करता है। मुझे अपना जवाब सुधारने दो। – Mecki

4

मैक ओएस एक्स के परीक्षण के लिए __MACH__ का उपयोग करता हूं - यह मैक ओएस एक्स के लिए 100% अद्वितीय नहीं है (वहां अभी भी कुछ पुराने नेक्स्ट बॉक्स हो सकते हैं!) लेकिन मैक और लिनक्स के बीच अंतर बताने के लिए यह काफी अच्छा है।

+0

__APPLE__ मैक ओएस एक्स और आईओएस को कवर करता है, इसलिए यह __MACH__ IMHO से बेहतर शर्त है। यह मेरे अनुभव से भी अधिक आम है –

+0

@ हंस-क्रिस्टोफस्टिनर एपीएलई ओएस एक्स पर दिखता नहीं है। – lang2

+0

मुझे लगता है @ हंस का अर्थ है '__APPLE__'? लेकिन फिर भी मुझे यकीन नहीं है कि यह 100% विश्वसनीय है? –

8

यदि आपको चाहिए तो __APPLE__ मैक्रो के साथ ओएसएक्स का पता लगाएं। यदि आप कर सकते हैं तो सुविधाओं का पता लगाने के लिए configure का उपयोग करना बेहतर है, लेकिन सब कुछ ठीक तरह से काम नहीं करता है।

+0

हाँ, मैंने अपने कोड में इस तरह से चुना है। मेरे पास अभी लिनक्स और ऐप्पल है इसलिए कोई समस्या नहीं है। धन्यवाद। – Viet

+2

मुझे '__APPLE__' जैसे कंपाइलर-परिभाषित मैक्रोज़ का उपयोग बहुत उपयोगी लगता है क्योंकि आप निर्माण प्रणाली से कोड को बहुत समय निकाल सकते हैं। फिर यह एंड्रॉइड या क्रोम नाक जैसे गूढ़ प्लेटफॉर्म पर पोर्टिंग करते समय आपको बहुत आसान बनाता है, जो '।/Config' और दोस्तों –

+0

@ हंस-क्रिस्टोफ के साथ अच्छा नहीं खेलता है: एक अच्छा क्रॉस-संकलन वातावरण वहां मदद कर सकता है। –

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