जब एक विशेष सी ++ संस्करण निर्दिष्ट करने के लिए इच्छुक तरह शायद कुछ, CMake 3.1 के साथ ऐसा कर और बाद में एक सुझाया गया तरीका लक्ष्य चूक निर्दिष्ट करने के लिए CXX_STANDARD
, CXX_STANDARD_REQUIRED
और CXX_EXTENSIONS
लक्ष्य गुण, या उनके चर समकक्ष उपयोग करने के लिए है । पूर्ण विवरण here पाया जा सकता है, लेकिन लघु संस्करण कुछ इस तरह चला जाता है:
cmake_minimum_required(VERSION 3.1)
project(Example)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# ... Define targets, etc. as usual
CMake तो अनुरोध किया सी ++ के आधार पर मानक के लिए उपयुक्त संकलक ध्वज का चयन करना चाहिए क्या संकलक का समर्थन करता है, या बाहर त्रुटि है, तो यह नहीं करता है अनुरोधित मानक का समर्थन नहीं करते हैं।
यह भी ध्यान दिया जाना चाहिए कि सीएमके CXX_STANDARD
लक्षित संपत्ति द्वारा निर्दिष्ट एक से अधिक भाषा मानक का उपयोग करने के लिए लक्ष्य को अपग्रेड कर सकता है। compile feature requirements का उपयोग (जैसा कि @FlorianWolters उत्तर में उल्लिखित है) भाषा मानक आवश्यकता को बढ़ा सकता है। वास्तव में, सीएमके हमेशा CXX_STANDARD
लक्षित संपत्ति या लक्ष्य पर सेट संकलन सुविधा आवश्यकताओं द्वारा निर्दिष्ट मजबूत भाषा आवश्यकता को उठाएगा। ध्यान दें कि 3.10.1 के रूप में सीएमके दस्तावेज CXX_EXTENSIONS
संकलित सुविधाओं के साथ इंटरैक्ट करता है, CXX_EXTENSIONS
केवलको सबसे आम कंपाइलर्स के लिए भी निर्दिष्ट किया जाता है (क्योंकि उन्हें एक कंपाइलर ध्वज के साथ निर्दिष्ट किया जाता है)।
स्रोत
2017-03-16 18:45:50
* "शायद सी ++ 11 के साथ समान समस्याएं हैं।" * यह सी ++ 11 बनाम सी ++ 0x होगा, जिसे पहले जीसीसी 4.7/8 में पेश किया जा रहा है। –
बीटीडब्ल्यू, पुराने स्विच (0x, 1y, 1z) आधुनिक लोगों का समर्थन करने वाले कंपाइलरों पर भी ठीक काम करते हैं, इसलिए इस "सही" को पाने के लिए कोई वास्तविक * आवश्यकता नहीं है। –
** ** ** कच्चे कंपाइलर झंडे को पार करने के बाद से यह "दाएं" प्राप्त करने की आवश्यकता है, एक सीएमके विरोधी पैटर्न है और मेटा-बिल्ड सिस्टम/बिल्ड सिस्टम जेनरेटर की पूरी अवधारणा के खिलाफ है। –