दिलचस्प पोस्ट
इस अजगर स्निपेट में अर्धविराम की अनुमति क्यों है? पायथन में डिवीजन 2.7 और 3.3 क्या यह सच है कि उत्पादन कोड पर एनएसएलॉग () का उपयोग नहीं करना चाहिए? मैं VS2012 में C ++ / CLI Winforms ऐप कैसे बनाऊँ? सी ऑटो कीवर्ड कहां उपयोग किया जाता है? एंड्रॉइड में मैं कैसे गतिशील रूप से दृश्य की स्थिति निर्धारित कर सकता हूं? PHP के साथ जीसीएम (Google क्लाउड मेसेजिंग) घातीय नोटेशन से एक संख्या पार्स करें PHP में माइक्रोसॉफ्ट-एन्कोडेड उद्धरणों को कैसे बदलना है java.lang.ClassNotFoundException परियोजना में कुछ भी बदलने के बाद लेकिन ग्रहण एंड्रॉइड एसडीके उन्नयन गतिशील रूप से एक JDialog के लिए घटक जोड़ें PHP में सीएसवी फ़ाइल से डेटा कैसे निकालें पांडा में कॉलम के डेटा प्रकार को बदलें एनएसडीटे वर्ष / महीना / दिन प्राप्त करें VS2010 Windows के 64-बिट संस्करण पर WinForms अनुप्रयोग में अप्रतिबंधित अपवाद संदेश नहीं दिखाता है

सीकेके में सी ++ 11 सक्रिय कैसे करें?

जब मैं अपने कार्यक्रम को संकलित करने के लिए सीएमके द्वारा निर्मित मेकफाइल को चलाने की कोशिश करता हूं, तो मुझे यह त्रुटि मिलती है

सीमाओं के आधार पर सीओ + 98 मोड में लूप समर्थित नहीं हैं

मैंने अपने add_definitions(-std=c++0x) को जोड़ने की कोशिश की, लेकिन यह मदद नहीं करता। मैंने यह भी कोशिश की:

 if(CMAKE_COMPILER_IS_GNUCXX) add_definitions(-std=gnu++0x) endif() 

जब मैं g++ --version हूं, तो मुझे मिलता है:

जी ++ (उबंटू / लिंडारो 4.6.1-9ubuntu3) 4.6.1

मैंने भी SET(CMAKE_CXX_FLAGS "-std=c++0x") , जो भी काम नहीं करता है।

मैं समझ नहीं पा रहा हूं कि मैं CMake का उपयोग करके सी ++ 11 सुविधाओं को कैसे सक्रिय कर सकता हूं।

वेब के समाधान से एकत्रित समाधान "सीकेके में सी ++ 11 सक्रिय कैसे करें?"

CMake 3.1 ने CMAKE_CXX_STANDARD वैरिएबल पेश किया है जिसका उपयोग आप कर सकते हैं। यदि आप जानते हैं कि आपके पास हमेशा CMake 3.1 उपलब्ध होगा, तो आप इसे अपने शीर्ष-स्तर CMakeLists.txt फ़ाइल में लिख सकते हैं या किसी नए लक्ष्य को परिभाषित करने से पहले इसे सही रख सकते हैं:

 set (CMAKE_CXX_STANDARD 11) 

यदि आपको सीमके के पुराने संस्करणों का समर्थन करने की ज़रूरत है, तो यहां एक मैक्रो है जिसका उपयोग आप कर सकते हैं:

 macro(use_cxx11) if (CMAKE_VERSION VERSION_LESS "3.1") if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set (CMAKE_CXX_FLAGS "-std=gnu++11 ${CMAKE_CXX_FLAGS}") endif () else () set (CMAKE_CXX_STANDARD 11) endif () endmacro(use_cxx11) 

मैक्रो अभी अभी जीसीसी का समर्थन करता है, लेकिन इसे अन्य कंपाइलर में विस्तार करने के लिए सीधी-आगे होना चाहिए

तो आप किसी भी CMakeLists.txt फ़ाइल के शीर्ष पर use_cxx11() लिख सकते हैं जो लक्ष्य को परिभाषित करता है जो C ++ 11 का उपयोग करता है

मैकोज़ को लक्षित करने वाले उपयोगकर्ताओं के लिए सीकेके अंक # 15 9 43

यदि आप CMAKE_CXX_STANDARD का उपयोग कर रहे हैं और मैकोज़ को लक्षित करने के लिए CMAKE_CXX_STANDARD हैं तो एक बग है जो CMAKE_CXX_STANDARD सुविधा को बस काम नहीं करने के कारण (किसी भी कंपाइलर फ्लैग को जोड़ नहीं) का कारण बन सकता है सुनिश्चित करें कि आप निम्न में से एक काम करते हैं:

  • CMake_minimum_required का उपयोग करने के लिए CMake 3.0 या बाद में, या
  • project कमांड से पहले अपने CMakeLists.txt फ़ाइल के शीर्ष पर निम्न कोड के साथ नीति CMP0025 को NEW पर सेट करें:

     # Fix behavior of CMAKE_CXX_STANDARD when targeting macOS. if (POLICY CMP0025) cmake_policy(SET CMP0025 NEW) endif () 

सीएमके कमांड target_compile_features() का उपयोग आवश्यक C ++ सुविधा cxx_range_for लिए निर्दिष्ट करने के लिए किया जाता है। सीमके तब सी + + मानक का उपयोग करने के लिए प्रेरित करेगा।

 cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) project(foobar CXX) add_executable(foobar main.cc) target_compile_features(foobar PRIVATE cxx_range_for) 

add_definitions(-std=c++11) का उपयोग करने की आवश्यकता नहीं है या CMake चर CMAKE_CXX_FLAGS को संशोधित करने के लिए, क्योंकि CMake सुनिश्चित करता है कि उचित कमांड लाइन झंडे के साथ सी + + कंपाइलर लागू किया गया है।

शायद आपका C ++ प्रोग्राम cxx_range_for तुलना में अन्य C ++ सुविधाओं का उपयोग करता है। CMake वैश्विक प्रॉपर्टी CMAKE_CXX_KNOWN_FEATURES में सी ++ सुविधाओं की सूची है, जिन्हें आप चुन सकते हैं।

target_compile_features() का उपयोग करने के बजाय आप अपने CXX_STANDARD_REQUIRED लक्ष्य के लिए CXX_STANDARD_REQUIRED गुणों CXX_STANDARD और CXX_STANDARD_REQUIRED सेट करके सी ++ मानक को स्पष्ट रूप से निर्दिष्ट कर सकते हैं।

मेरे और अधिक विस्तृत उत्तर भी देखें।

मै इस्तेमाल कर रहा हूँ

 include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) if(COMPILER_SUPPORTS_CXX11) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") elseif(COMPILER_SUPPORTS_CXX0X) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") else() message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") endif() 

लेकिन अगर आप C++11 साथ खेलना चाहते हैं, तो g++ 4.6.1 काफी पुराना है। एक नया g++ संस्करण प्राप्त करने का प्रयास करें

सीडीए मानक सेट करने का सबसे आसान तरीका है

  set_property(TARGET tgt PROPERTY CXX_STANDARD 11) 

अधिक जानकारी के लिए सेंमी डॉक्टर देखें।

जैसा कि यह पता चला है, SET(CMAKE_CXX_FLAGS "-std=c++0x") कई सी ++ 11 सुविधाओं को सक्रिय करता है। इसका कारण यह नहीं था कि बयान इस तरह दिखता था:

 set(CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS} -g -ftest-coverage -fprofile-arcs") 

इस दृष्टिकोण के बाद, किसी -std=c++0x ध्वज को ओवरराइट किया गया था और यह काम नहीं कर रहा था। झंडे को एक करके या सूची पद्धति का प्रयोग करना काम कर रहा है।

 list( APPEND CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS} -g -ftest-coverage -fprofile-arcs") 

सबसे आसान तरीका:

add_compile_options(-std=c++11)

यह सी ++ 11 समर्थन को सक्षम करने का एक और तरीका है,

 ADD_DEFINITIONS( -std=c++11 # Or -std=c++0x # Other flags ) 

मुझे ऐसी घटनाओं का सामना करना पड़ा जहां केवल यह विधि काम करती है और अन्य विधियां विफल होती हैं। हो सकता है कि यह सीमके के नवीनतम संस्करण के साथ कुछ करना है।

मेरे लिए काम करने वाला यह है कि आप अपने CMakeLists.txt में निम्न पंक्ति सेट करें:

 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

इस आदेश को सेट करने से कम्पाइलर के लिए सी ++ 11 सुविधाओं को सक्रिय किया जाता है और cmake .. क्रियान्वित करने के बाद, आप अपने कोड में range based for loops का उपयोग कर सकते हैं और बिना किसी त्रुटि के संकलन कर सकते हैं।

OSX और होमब्रेड LLVM संबंधित:

Cmake_minimum_required (संस्करण 3.3) और परियोजना () इसके बाद कॉल करने के लिए मत भूलना!

या सेमीके परियोजना () को सम्मिलित रूप से लाइन 1 से पहले वर्णित करता है जिसके कारण झूठ संस्करण का पता लगाने और संभवत: परेशानी के अन्य प्रकार होते हैं। यहाँ संबंधित मुद्दा है