2010-04-17 17 views
99

मैं अपने स्रोत कोड को संकलित करने के लिए उपयोग किए गए कंपाइलर का पता लगाने की कोशिश कर रहा हूं। मैं आसानी से एमएसवीसी या जीसीसी की जांच के लिए पूर्वनिर्धारित मैक्रोज़ ढूंढ सकता हूं (उदाहरण के लिए http://predef.sourceforge.net/ देखें), लेकिन मुझे क्लैंग की जांच करने के लिए कोई मैक्रो नहीं मिल रहा है।क्लैंग का पता लगाने के लिए मैं किस पूर्वनिर्धारित मैक्रो का उपयोग कर सकता हूं?

किसी को पता है अगर बजना आदेश को पता है कि वर्तमान में मेरे कोड संकलन में __CLANG__ की तरह एक मैक्रो को परिभाषित करता है करता है?

+9

http://predef.sourceforge.net/precomp.html#sec4 – Yktula

+1

[कंपाइलर मैक्रोज़ की अद्यतन सूची] (http://sourceforge.net/p/predef/wiki/ कंपाइलर्स /) – chrisaycock

उत्तर

67

strings + grep जवाब का उपयोग कर मिला:

$ strings /usr/bin/clang | grep __ | grep -i clang 
__clang__ 
105

सभी पूर्व-निर्धारित मैक्रो कि संकलक का उपयोग करता है की एक सूची प्राप्त करने के लिए, इस का उपयोग करें:

clang -dM -E -x c /dev/null 

आप जीसीसी के लिए भी ऐसा ही कर सकते हैं ।

32

यह सवाल वर्षों के लिए उत्तर दिया गया है लेकिन मेरे (भविष्य में संदर्भ के लिए) जोड़ने यह कैसे विंडोज में किया जाता है:

echo | clang -dM -E - 

जीसीसी के लिए के रूप में ही:

echo | gcc -dM -E - 

कृपया ध्यान दें : अंतिम डैश - वास्तव में महत्वपूर्ण है! (अन्यथा आप दोनों कंपाइलरों के लिए error: no input files प्राप्त करें)

+4

एफवाईआई, विंडोज़ '/ dev/null' के बराबर है' NUL: ' – legalize

+0

@legalize Whoa! मुझे यह नहीं पता था! यह बहुत मजेदार है; आपको वह कहाँ मिलेगा? –

+1

यह डॉस दिनों के बाद से रहा है, बस अधिकांश डॉस/विंडोज उपयोगकर्ताओं को इसकी आवश्यकता नहीं है। – legalize

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

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