मैं gcc में C ++ 11 को कैसे सक्षम करूँ?


117

मैं मैक OSX माउंटेन शेर पर http://hpc.sourceforge.net से gcc 4.8.1 का उपयोग करता हूं । मैं C ++ प्रोग्राम को संकलित करने की कोशिश कर रहा हूं जो to_stringफ़ंक्शन का उपयोग करता है <string>। मुझे -std=c++11हर बार ध्वज का उपयोग करने की आवश्यकता है :

g++ -std=c++11 -o testcode1 code1.cpp

क्या इस ध्वज को डिफ़ॉल्ट रूप से शामिल करने का कोई तरीका है?


3
मेकफाइल का उपयोग करें और इसे अंदर डालें CXXFLAGS

व्यक्तिगत रूप से मैं इस तरह के झंडे का उपयोग करने के लिए एक ऑटोमेटर सेवा के साथ गया हूं। Makefiles भी अच्छे हैं, और फिर निश्चित रूप से XCode (या कोई अन्य IDE) है।
डेव

देव-सी ++ और अन्य आईडीई में संकलक विकल्प हैं जहां आप इसे सेट कर सकते हैं
बोक्टुलस

जवाबों:


90

H2CO3 सही है, आप cXXFLAGS सेट के साथ -fd = c ++ 11 के साथ एक मेकफाइल का उपयोग कर सकते हैं। एक मेकफाइल एक सरल पाठ फ़ाइल है जिसमें आपके प्रोग्राम को संकलित करने के बारे में निर्देश हैं। Makefile (एक राजधानी एम के साथ) नामक एक नई फ़ाइल बनाएँ। अपने कोड को स्वचालित रूप से संकलित करने के लिए बस टर्मिनल में मेक कमांड टाइप करें । आपको मेक इनस्टॉल करना पड़ सकता है।

यहाँ एक सरल है:

CXX=clang++
CXXFLAGS=-g -std=c++11 -Wall -pedantic
BIN=prog

SRC=$(wildcard *.cpp)
OBJ=$(SRC:%.cpp=%.o)

all: $(OBJ)
    $(CXX) -o $(BIN) $^

%.o: %.c
    $(CXX) $@ -c $<

clean:
    rm -f *.o
    rm $(BIN)

यह मानता है कि सभी .cpp फाइलें मेकफाइल के समान निर्देशिका में हैं। लेकिन आप आसानी से एक src का समर्थन, शामिल करने और निर्देशिकाओं का निर्माण करने के लिए अपने मेकफाइल को ट्वीक कर सकते हैं।

संपादित करें : मैंने डिफ़ॉल्ट c ++ संकलक को संशोधित किया, g ++ का मेरा संस्करण अद्यतित नहीं है। क्लैंग ++ के साथ यह मेकफाइल ठीक काम करता है।


धन्यवाद Silouane और @ H2CO3 :) मुझे मेकफाइल्स के साथ काम करना सीखना चाहिए
Guddu

1
@guddu: यहां एक ट्यूटोरियल है जो एक संपूर्ण परिचय लगता है। फिर आप विशेष मैक्रोज़ की
सिलौने गेरिन

1
इस बात पर ध्यान देने योग्य है कि मानक मेकफाइल सिंटैक्स में टैब वर्णों की आवश्यकता होती है, या यह क्रिप्टिक, मुहावरेदार त्रुटियां देगा। यही वजह है कि मैं RECIPEPREFIX साथ gmake का उपयोग के रूप में में दिखाया गया है प्रलेखन । टैब वर्ण एक घृणा है; उन्हें कभी इस्तेमाल न करें।
पार्थियन शॉट

24

जैसा कि पहले उल्लेख किया गया है - एक परियोजना के मामले में, Makefileया अन्यथा, यह एक परियोजना कॉन्फ़िगरेशन समस्या है, जहां आपको अन्य झंडे भी निर्दिष्ट करने की आवश्यकता होगी।

लेकिन एक-बंद कार्यक्रमों के बारे में क्या, जहां आप सामान्य रूप से सिर्फ लिखेंगे g++ file.cpp && ./a.out?

ठीक है, मैं कुछ है करने के लिए बहुत पसंद हैं #pragmaएक डिफ़ॉल्ट विस्तार स्रोत स्तर, या हो सकता है पर पर में चालू करने के लिए - कहते हैं .cxxया .C11या जो कुछ भी, डिफ़ॉल्ट रूप से यह ट्रिगर। लेकिन आज तक, ऐसी कोई सुविधा नहीं है।

लेकिन, जैसा कि आप शायद एक मैनुअल वातावरण (यानी शेल) में काम कर रहे हैं, आप बस आप में एक उपनाम .bashrc(या जो भी हो) कर सकते हैं:

alias g++11="g++ -std=c++0x"

या, नए G ++ के लिए (और जब आप "वास्तविक C ++ 11" महसूस करना चाहते हैं)

alias g++11="g++ -std=c++11"

g++यदि आप C ++ 03 से बहुत अधिक नफरत करते हैं, तो आप खुद को भी उर्फ ;)


7

मुझे लगता है कि आप इसे ऐनक फ़ाइल का उपयोग कर सकते हैं।

MinGW के तहत आप
gcc -dumpspecs> चश्मा चला सकते हैं

यह कहां कहा गया है

*cpp:
%{posix:-D_POSIX_SOURCE} %{mthreads:-D_MT}

आप इसे बदल दें

*cpp:
%{posix:-D_POSIX_SOURCE} %{mthreads:-D_MT} -std=c++11

और फिर इसे
/ mingw / lib / gcc / mingw32 / <version> / चश्मा में रखें

मुझे यकीन है कि आप MinGW बिल्ड के बिना भी ऐसा कर सकते हैं। हालांकि यह सुनिश्चित नहीं है कि चश्मा फ़ाइल कहाँ रखें।

फोल्डर शायद या तो / gcc / lib / या / gcc / है।


1
इस समय, gcc-6 का निर्माण करना आसान है, जहां डिफ़ॉल्ट C ++ 14 है।
मार्क ग्लिससे

लिनक्स के तहत, आप रनिंग करके स्थान पा सकते हैं strace -f gcc your-sources-here 2>&1 | grep specs। एक (पुराने) डेबियन सिस्टम पर, यह पैदावार देता है /usr/lib/gcc/i586-linux-gnu/4.9/specs। बनाया गया है कि specsजवाब में वर्णित (लिनक्स के तहत इसे स्थानांतरित करने के लिए sudo की जरूरत है) और एक आकर्षण की तरह काम करता है! धन्यवाद।
एड्रियन डब्ल्यू

0

यदि आप उदात्त का उपयोग कर रहे हैं तो यह कोड काम कर सकता है यदि आप इसे बिल्डिंग सिस्टम के लिए कोड के रूप में जोड़ते हैं। अधिक जानकारी के लिए आप इस लिंक का उपयोग कर सकते हैं ।

{
    "shell_cmd": "g++ \"${file}\" -std=c++1y -o \"${file_path}/${file_base_name}\"",
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c, source.c++",

    "variants":
    [
        {
            "name": "Run",
            "shell_cmd": "g++ \"${file}\" -std=c++1y -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\""
        }
    ]
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.