আমি কীভাবে সিসি + 11 জিসিসিতে সক্ষম করব?


117

আমি ম্যাক ওএসএক্স মাউন্টেন লায়নটিতে http://hpc.sourceforge.net থেকে জিসিসি 4.8.1 ব্যবহার করি । আমি একটি সি ++ প্রোগ্রাম সংকলন করার চেষ্টা করছি যা এতে to_stringফাংশনটি ব্যবহার করে <string>। আমাকে -std=c++11প্রতিবার পতাকাটি ব্যবহার করা দরকার :

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

এই পতাকাটি ডিফল্টরূপে অন্তর্ভুক্ত করার কোনও উপায় আছে কি?


3
একটি Makefile ব্যবহার করুন এবং এটি putোকান CXXFLAGS

ব্যক্তিগতভাবে আমি এই জাতীয় পতাকা ব্যবহার করে সংকলন করতে একটি স্বয়ংক্রিয় পরিষেবা নিয়ে চলেছি। মেকফাইলগুলিও ভাল, এবং অবশ্যই এক্সকোড (বা অন্য কোনও আইডিই) রয়েছে।
ডেভ

দেব-সি ++ এবং অন্যান্য আইডিইগুলির সংকলক বিকল্প রয়েছে যেখানে আপনি এটি সেট করতে পারেন
বোকটুলাস

উত্তর:


90

H2CO3 ঠিক আছে, আপনি -std = c ++ 11 দিয়ে সিএক্সএক্সএফএলএজিএস সেট করে একটি মেকফিল ব্যবহার করতে পারেন একটি মেকফিল আপনার প্রোগ্রামটি কীভাবে সংকলন করতে হয় সে সম্পর্কে নির্দেশাবলী সহ একটি সাধারণ পাঠ্য ফাইল। মেকফিল (একটি মূলধন এম সহ) নামে একটি নতুন ফাইল তৈরি করুন। আপনার কোডটি স্বয়ংক্রিয়ভাবে সংকলন করতে একটি টার্মিনালে মেক কমান্ডটি টাইপ করুন । আপনি মেক ইনস্টল করতে হতে পারে।

এখানে একটি সহজ:

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 ফাইলগুলি মেকফিলের মতো একই ডিরেক্টরিতে রয়েছে। তবে আপনি নিজের মেকফিলটিকে সহজেই একটি এসসিআর সমর্থন করতে, অন্তর্ভুক্ত করতে এবং ডিরেক্টরিগুলি তৈরি করতে পারেন।

সম্পাদনা : আমি ডিফল্ট সি ++ সংকলকটি সংশোধন করেছি, আমার g ++ সংস্করণটি আপ টু ডেট নয়। ঝাঁকুনির সাথে ++ এই মেকফিলটি দুর্দান্ত কাজ করে।


ধন্যবাদ সিলোয়েন এবং @ এইচ 2 সি 3 :) আমার মেকফাইলগুলি নিয়ে কাজ করা শিখতে হবে
গুড্ডু

1
@ গুড্ডু: এখানে একটি টিউটোরিয়াল রয়েছে যা পুরোপুরি একটি সম্পূর্ণ ভূমিকা বলে মনে হচ্ছে। তারপরে আপনি বিশেষ ম্যাক্রোগুলি
সিলোয়েন গেরিন

1
স্ট্যান্ডার্ড মেকফিল সিনট্যাক্সের জন্য ট্যাব অক্ষর প্রয়োজন বা এটি ক্রিপ্টিক, বুদ্ধিমান ত্রুটিগুলি দেবে তা উল্লেখযোগ্য। ডকুমেন্টেশনে যেমন দেখানো হয়েছে তেমন আমি RECIPEPREFIX এর সাথে গেমকে ব্যবহার করি । ট্যাব অক্ষর একটি ঘৃণা; তাদের কখনই ব্যবহার করবেন না।
পার্থিয়ান শট

24

পূর্বে উল্লিখিত হিসাবে - কোনও প্রকল্পের ক্ষেত্রে, Makefileবা অন্যথায়, এটি একটি প্রকল্পের কনফিগারেশন সমস্যা, যেখানে আপনাকে সম্ভবত অন্যান্য পতাকাও নির্দিষ্ট করতে হবে।

তবে ওয়ান-অফ প্রোগ্রামগুলি সম্পর্কে কী, যেখানে আপনি সাধারণত লিখবেন g++ file.cpp && ./a.out?

আচ্ছা, আমি কিছু আছে অনেক চাই #pragmaএকটি ডিফল্ট এক্সটেনশন উৎস স্তর, হয়তো বা এ চালু - বলে .cxxবা .C11বা যাই হোক না কেন, ডিফল্ট দ্বারা এটি ট্রিগার। তবে আজকের মতো, এখানে কোনও বৈশিষ্ট্য নেই।

তবে, আপনি সম্ভবত একটি ম্যানুয়াল পরিবেশে (যেমন শেল) কাজ করছেন, আপনার নিজের .bashrc(বা যাই হোক না কেন) একটি নাম রাখতে পারেন :

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

বা, আরও নতুন জি ++ এর জন্য (এবং আপনি যখন "আসল সি ++ 11" বোধ করতে চান)

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

এমনকি আপনি g++নিজের নামও দিতে পারেন, আপনি যদি C ++ 03 ঘৃণা করেন তবে)


7

আমি মনে করি আপনি একটি চশমা ফাইল ব্যবহার করে এটি করতে পারতেন।


মিনজিডাব্লু এর অধীনে আপনি জিসিসি -ডাম্পস্পেকস> চশমা চালাতে পারেন

যেখানে এটা বলে

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

আপনি এটি পরিবর্তন

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

এবং তারপরে এটিকে
/ মিংডাব্লু / লাইব / জিসিসি / মিংডু 32 / <version> / স্পেসে রাখুন

আমি নিশ্চিত আপনি একটি মিনিজিডাব্লু বিল্ড না করে একই কাজ করতে পারতেন। চশমা ফাইলটি কোথায় রাখবেন তা নিশ্চিত নয়।

ফোল্ডারটি সম্ভবত / জিসিসি / লিব / বা / জিসিসি / হয়।


1
এই সময়ে, জিসিসি -6 তৈরি করা আরও সহজ, যেখানে ডিফল্ট সি ++ 14 হয়।
মার্ক গ্লিস

লিনাক্সের অধীনে, আপনি চালিয়ে লোকেশনটি সন্ধান করতে পারেন strace -f gcc your-sources-here 2>&1 | grep specs। এক (পুরানো) দেবিয়ান সিস্টেমে এটি ফলন করে /usr/lib/gcc/i586-linux-gnu/4.9/specsspecsউত্তরে বর্ণিত হিসাবে এটি তৈরি করা হয়েছে (এটি লিনাক্সের অধীনে সরিয়ে নিতে 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}\""
        }
    ]
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.