একাধিক .cpp এবং .h ফাইল সংকলন করতে G ++ ব্যবহার করা


172

আমি সবেমাত্র কিছু সি ++ কোড পেয়েছি যা একটি সিপিপি ফাইলের সাথে খারাপভাবে লেখা হয়েছিল যা মূল এবং অন্যান্য ফাংশনগুলির একটি গুচ্ছ ছিল। .hক্লাস এবং তাদের ফাংশন সংজ্ঞা রয়েছে এমন ফাইলগুলি রয়েছে।

এখন অবধি প্রোগ্রামটি কমান্ডটি ব্যবহার করে সংকলিত ছিল g++ main.cpp। এখন আমি ক্লাসগুলি পৃথক করে দিয়েছি .hএবং .cppফাইলগুলি কি আমার একটি মেকফিল ব্যবহার করা দরকার বা আমি এখনও g++ main.cppকমান্ডটি ব্যবহার করতে পারি ?

উত্তর:


224

মেইন সি পি পি এর পরে অন্য সমস্ত সিপিপি ফাইল তালিকাভুক্ত করুন।

অর্থাত

g++ main.cpp other.cpp etc.cpp

ইত্যাদি।

অথবা আপনি সেগুলি পৃথকভাবে সংকলন করতে পারেন। তারপরে আপনি সমস্ত ফলাফল ".o" ফাইলগুলি একসাথে লিঙ্ক করুন।


152
আপনি এমনকি করতে পারেনg++ *.cpp -o output
রুবেভবি

7
এটি কি কোনওভাবেই খারাপ অভ্যাস? আমি এটি আমার মেকফেলে ব্যবহার করতে চাই।
গ্যাব্রিয়েল_ভিনসেন্ট

8
@ গ্যাব্রিয়েল_ভিনসেন্ট, এটি অগত্যা খারাপ অভ্যাস নয়, তবে এর অর্থ হ'ল কয়েকশ প্রকল্পে একটি ফাইল সম্পাদনা করলে সমস্ত ফাইলের জন্য সমস্ত কাজ পুনরায় করতে কম্পাইলারের কারণ ঘটবে। পৃথকভাবে সংকলন বর্ধিত সংকলনের অনুমতি দেয়।
পল ড্রাগার

@ গ্যাব্রিয়েল_ভিনসেন্ট আপনার হাত দিয়ে মেকফাইল লিখতে হবে না begin পরিবর্তে সিএমকের মতো একটি উপযুক্ত বিল্ড সিস্টেম ব্যবহার করুন।
বাযুমের Augen MIT

3
@ বাউমিট অউজেন হ্যাঁ, আমি কেবল এই ছোট্ট 2-ফাইল প্রোগ্রামটি 14 মিনিটের মধ্যে লিখেছিলাম তা সংকলন করতে চাই, এবং আমি সত্যই এক ঘন্টার কমেক সেট আপ না করে একটি মেকফিল লেখার জন্য 1 মিনিট ব্যয় করতে পছন্দ করব।
প্রেজেক ডি

55

লিঙ্ক না করে আলাদাভাবে সংকলন করতে আপনার -cবিকল্প যুক্ত করতে হবে :

g++ -c myclass.cpp
g++ -c main.cpp
g++ myclass.o main.o
./a.out

3
আপনি যদি লিঙ্কিং পদক্ষেপে এক্সিকিউটেবলের নাম নিয়ন্ত্রণ করতে চান তবে আপনি সাধারণত যা করেন ঠিক g++ -o my_executable myclass.o main.o
তেমনটি

22

এখন আমি .h এবং .cpp ফাইলগুলিতে ক্লাসগুলি পৃথক করে ফেলেছি আমার কি একটি মেকফিল ব্যবহার করা দরকার বা আমি এখনও "g ++ main.cpp" কমান্ডটি ব্যবহার করতে পারি?

আপনি যদি মেকফাইলে রেখে যাচ্ছেন তবে একবারে বেশ কয়েকটি ফাইল সংকলন করা একটি দুর্বল পছন্দ।

সাধারণত কোনও মেকফাইলে ( জিএনইউ / মেকের জন্য ) এটি লেখার জন্য পর্যাপ্ত হওয়া উচিত:

# "all" is name of the default target, running "make" without params would use it
all: executable1

# for C++, replace CC (c compiler) with CXX (c++ compiler) which is used as default linker
CC=$(CXX)

# tell which files should be used, .cpp -> .o make would do automatically
executable1: file1.o file2.o

এইভাবে makeসঠিকভাবে পুনরায় সংযোগ করা হবে যা কেবল পুনরায় সংযোগ করা দরকার। শিরোনামের ফাইল নির্ভরতা তৈরি করতে কেউ কয়েকটি টুইটও যুক্ত করতে পারে - যাতে শিরোনামের ফাইলের পরিবর্তনের কারণে পুনর্নির্মাণের জন্য যা তৈরি করা দরকার তা মেকটি সঠিকভাবে তৈরি করতে পারে।


13

আপনি চাইলে সরাসরি জি ++ ব্যবহার করতে পারেন:

g++ f1.cpp f2.cpp main.cpp

যেখানে f1.cpp এবং f2.cpp ফাংশনগুলির সাথে ফাইল রয়েছে। বিল্ডটি করার জন্য মেক ব্যবহার কীভাবে করবেন তার বিশদগুলির জন্য, সেরা জিএনইউ মেক ডকুমেন্টেশন দেখুন


12

আমি জানি এই প্রশ্নটি বহু বছর আগে জিজ্ঞাসা করা হয়েছিল তবে এখনও আমি কীভাবে একাধিক সি ++ ফাইলগুলি সংকলন করব তা ভাগ করে নিতে চেয়েছিলাম।

  1. আসুন বলে আপনি 5 CPP ফাইল আছে, সব আপনাকে যা করতে হবে ব্যবহার * পরিবর্তে নাম প্রতিটি CPP ফাইল টাইপ যেমন g++ -c *.cpp -o myprogram
  2. এটি উত্পন্ন হবে "myprogram"
  3. প্রোগ্রাম চালান ./myprogram

এখানেই শেষ!!

আমি * ব্যবহার করার কারণটি হ'ল যদি আপনার কাছে 30 সিপিপি ফাইল থাকে তবে আপনি সমস্তগুলি টাইপ করবেন? অথবা কেবল * সাইন ব্যবহার করুন এবং সময় সাশ্রয় করুন :)

আপনি যদি মেকফিলের বিষয়ে চিন্তা না করেন তবেই এই পদ্ধতিটি ব্যবহার করুন।


1
আমি যখন এই পদ্ধতিটি ব্যবহার করি তখন পুনরায় সংজ্ঞা ত্রুটি দেখা দেয়? একই কাজ করার অন্য উপায় আছে?
ওয়াসিম আহমেদ না

11

.h ফাইলগুলি সংকলনের সাথে কিছুই করবে না ... আপনি কেবল সিপিপি ফাইলগুলি সম্পর্কে যত্নশীল ... তাই টাইপ করুন g++ filename1.cpp filename2.cpp main.cpp -o myprogram

এর অর্থ আপনি প্রতিটি সিপিপি ফাইল সংকলন করছেন এবং তারপরে এগুলিকে সংযুক্ত করছেন myprgram

তারপরে আপনার প্রোগ্রামটি চালান ./myprogram


7

যেমন রেবেএনভিপি বলেছিল আমি ব্যবহার করেছি:

g++ *.cpp -o output

এবং তারপরে আউটপুট জন্য এটি করুন:

./output

তবে আরও ভাল সমাধান হ'ল makeফাইল ব্যবহার করা । ফাইল সম্পর্কে আরও জানতে এখানে পড়ুন make

আপনি .hফাইলগুলিতে প্রয়োজনীয় ফাইলগুলি যুক্ত করেছেন তাও নিশ্চিত করুন .cpp


4

আপনি বেশ কয়েকটি g ++ কমান্ড ব্যবহার করতে পারেন এবং তারপরে লিংকটি ব্যবহার করতে পারেন তবে একটি সহজ a


2

আপনি যদি #include <myheader.hpp>নিজের সিপিপি ফাইলের ভিতরে ব্যবহার করতে চান তবে আপনি এটি ব্যবহার করতে পারেন:

g++ *.cpp -I. -o out

1

আমি একটি কাস্টম মেকফিল ব্যবহার করতাম যা বর্তমান ডিরেক্টরিতে থাকা সমস্ত ফাইল সংকলন করেছিল, তবে আমাকে এটি প্রতিটি ডিরেক্টরিতে প্রয়োজন ছিল, প্রতিবারই copy

সুতরাং আমি আমার নিজস্ব সরঞ্জাম তৈরি করেছি - ইউনিভার্সাল কম্পাইলার যা অনেকগুলি ফাইল সংকলন করার সময় প্রক্রিয়াটি আরও সহজ করে তুলেছিল।


-4

In / ইন_প্রজেক্ট ডিরেক্টরী $ জি ++ কোর্ডিন_মেন.সিপি কোঅর্ডিন_ফানসি.সি.পি.

~ / ইন_প্রজেক্ট ডিরেক্টরী $। / আ.আউট

... কাজ করছে!!

জিয়ান আইডিই সহ লিনাক্স মিন্ট ব্যবহার করা

যখন আমি প্রতিটি ফাইল একই ডিরেক্টরিতে সংরক্ষণ করি, তখন একটি ফাইল ডিরেক্টরিতে সঠিকভাবে সংরক্ষণ করা যায় নি; ordin.h ফাইল। সুতরাং, পুনরায় যাচাই করা হয়েছে এবং এটি স্থানাঙ্ক হিসাবে সংরক্ষণ করা হয়েছে, এবং - >ordin.h.gch হিসাবে ভুলভাবে নয়। ছোট জিনিস। ARG !!


3
আপনি এইচ-ফাইল অন্তর্ভুক্ত করেছেন বলে আপনি হতাশ হচ্ছেন, এটি একটি ত্রুটি।
এরিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.