2012-02-19 16 views
8

जीसीसी और gfortran के साथ मैं का उपयोग कर संकलक द्वारा परिभाषित preprossesor मैक्रो की एक सूची उत्पन्न कर सकते हैं की सूची उत्पन्न (ouah के जवाब प्रतिबिंबित करने के लिए संपादित)संकलक द्वारा परिभाषित पूर्वप्रक्रमक मैक्रो

gcc -E -dM - < /dev/null 

और

gfortran -cpp -E -dM /dev/null 

क्रमशः (कम से कम लिनक्स पर)।

मैं इंटेल कंपाइलर्स आईसीसी और इफोर्ट के साथ ऐसा कैसे कर सकता हूं? मुझे पता है कि ifort के लिए इन मैक्रोज़ को here परिभाषित किया गया है, लेकिन मैं इस सूची को स्वयं उत्पन्न करने में सक्षम होना चाहता हूं, क्योंकि उपयोग में सटीक मैक्रोज़ और उनके मान उपयोग किए गए कंपाइलर विकल्पों पर निर्भर होंगे। मुझे predef प्रोजेक्ट के बारे में भी पता है।

उत्तर

3
इंटेल फोरट्रान संकलक, ifort साथ

, निम्नलिखित इस्तेमाल किया जा सकता:

ifort -E -fpp /dev/null -dryrun 2>&1 | grep -e -D | cut -c 5- 

ऐसा लगता है की तुलना में ifort एक बराबर -dM झंडा आईसीसी, gfortran और जीसीसी कर की तरह नहीं है।

+0

इसे स्वीकार्य उत्तर के रूप में चिह्नित करना क्योंकि मैं वास्तव में केवल इफोर्ट के साथ प्रयुक्त प्रीप्रोसेसर निर्देश प्राप्त करने में चिंतित था (इंटेल सी कंपाइलर को शामिल करने के सामान्यीकरण को उम्मीद है कि यह प्रश्न अधिक आम तौर पर उपयोगी होगा)। – Chris

+1

'ifort' हमेशा ट्रिकियर है - इसलिए इसे शामिल करने के लिए धन्यवाद! – patrickvacek

10

इंटेल संकलक के साथ इस का उपयोग करें:

icc -E -dM - < /dev/null 

ध्यान दें कि gcc साथ, -E विकल्प भी आप -dM पूर्वप्रक्रमक विकल्प का उपयोग करना चाहते हैं की आवश्यकता है।

+0

'gcc' के साथ' -E' विकल्प का उपयोग करने के नोट के लिए धन्यवाद - मैंने इस ध्वज को शामिल करने के लिए अपना प्रश्न संपादित किया है। Ifort के साथ ऐसा करने पर कोई विचार? – Chris

1

gfortran के लिए, सावधान रहें कि gfortran -E -dM - < /dev/null उसी परिणाम को उत्पन्न करता है जैसे आपने gcc कहा था, जो शायद उपयोगी नहीं है।

gfortran -cpp -E -dM empty.f

है कि आप क्या gfortran वास्तव में predefines की एक छोटी सूची दे देंगे: आप शायद इस (source) की तरह कुछ करना चाहते हैं। आप ध्यान दें कि परिणामों में सबसे अधिक संभावना ऑपरेटिंग सिस्टम को निर्धारित करने के लिए कुछ भी उपयोगी नहीं है। आम तौर पर, फोरट्रान के लिए, आपको स्वयं को परिभाषित करने के लिए छोड़ दिया जाता है। अतिरिक्त विवरण के लिए here देखें। आप this जैसे कुछ भी कोशिश कर सकते हैं, लेकिन मैं उस समाधान के व्यावहारिक रूप से थोड़ा सा संदेह कर रहा हूं। साथ ही, उस लिंक का तात्पर्य है कि एक समय में gfortran अब इससे अधिक परिभाषित किया गया है।

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