2010-10-30 11 views
24

क्या सेमेक में जीसीसी के मामूली संस्करण संख्या की जांच करना संभव है?सेमीकेक में जीसीसी नाबालिग की जांच करें

मैं इस तरह कुछ करना चाहता हूँ:

If (GCC_MAJOR >= 4 && GCC_MINOR >= 3) 
+0

संभावित डुप्लिकेट [मैं न्यूनतम संकलक संस्करण को कैसे जोड़ सकता हूं?] (Http://stackoverflow.com/questions/14933172/how-can-i-add-a-minimum-compiler-version-requisite) – sleske

+0

यदि मैं आपके इरादों को सही तरीके से अनुमान लगा रहा हूं, तो यह जीसीसी 5.0, 5.1, 6.0, 6.1, आदि का गलत पता लगाएगा – jww

उत्तर

31

उपयोग if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2) रूप onqtam द्वारा उल्लेख किया है। यह अप्रचलित उत्तर 2.6 सीएमके दिनों से वापस था।

आप gcc -dumpversion चला सकते हैं और आउटपुट पार्स कर सकते हैं। ऐसा करने का एक तरीका यहां है:

if (CMAKE_COMPILER_IS_GNUCC) 
    execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion 
        OUTPUT_VARIABLE GCC_VERSION) 
    string(REGEX MATCHALL "[0-9]+" GCC_VERSION_COMPONENTS ${GCC_VERSION}) 
    list(GET GCC_VERSION_COMPONENTS 0 GCC_MAJOR) 
    list(GET GCC_VERSION_COMPONENTS 1 GCC_MINOR) 

    message(STATUS ${GCC_MAJOR}) 
    message(STATUS ${GCC_MINOR}) 
endif() 

जो जीसीसी संस्करण 4.3.1 के लिए "4" और "3" प्रिंट करेगा। लेकिन अगर आप वाक्य रचना की जाँच के जीवन थोड़ा आसान बनाने के लिए CMake के संस्करण का उपयोग करें और regex सामान छोड़ सकते हैं:

execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion 
       OUTPUT_VARIABLE GCC_VERSION) 
if (GCC_VERSION VERSION_GREATER 4.3 OR GCC_VERSION VERSION_EQUAL 4.3) 
     message(STATUS "Version >= 4.3") 
endif() 

+0

मैंने पाया कि वास्तव में उपयोगी, धन्यवाद। संस्करण संख्या से नई लाइन को पट्टी करने का कोई तरीका है? – Patryk

+0

जीसीसी 7 के रूप में, '-डम्पवर्जन' अब केवल '7' आउटपुट करता है, इसलिए यह टूटा हुआ है। ऑनक्टाम द्वारा उत्तर पसंद करें जो कहीं अधिक पोर्टेबल है। –

+0

2.8.10 अब परिवर्तनीय है, लेकिन आप यह जानना चाहेंगे कि gcc है -dumpfullversion – sherpya

17

CMake 2.8.10 के बाद से वहाँ CMAKE_C_COMPILER_VERSION और CMAKE_CXX_COMPILER_VERSION चर वास्तव में तो आप इस उद्देश्य के लिए कर रहे हैं यह कर सकते हैं:

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2) 
+1

यह स्वीकार्य उत्तर होना चाहिए: सभी वर्तमान और भविष्य के कंपाइलर संस्करणों के लिए छोटे, सरल, अच्छी तरह परिभाषित। उत्तर अभी स्वीकार किया गया है (richq द्वारा) में एक समस्या है: '-डम्पवर्जन' अब जीसीसी 7 में '7' देता है, इसलिए यह एक टूटा समाधान है। –

9

2 अन्य उत्तर के संयोजन, आप विशिष्ट जीसीसी संस्करण निम्नानुसार जाँच कर सकते हैं:

if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.1) 
    ... 
endif() 
संबंधित मुद्दे