জিএনইউ মেকের সাথে ওপেন সোর্স সফটওয়্যার ডেভলপমেন্টে মেকফিলের সংক্ষিপ্ত পরিচিতি


জিএনইউ মেক হ'ল একটি ডেভলপমেন্ট ইউটিলিটি যা নির্দিষ্ট কোড বেসের অংশগুলি পুনরায় সংকলন করতে হবে এবং কোড বেসে এই ক্রিয়াকলাপ সম্পাদনের জন্য কমান্ড জারি করতে পারে যা নির্ধারণ করে। এই নির্দিষ্ট মেক ইউটিলিটি কোনও প্রোগ্রামিং ভাষার সাথে ব্যবহার করা যেতে পারে তবে শর্ত থেকে কমান্ড জারি করে তাদের সংকলন সম্পন্ন করা যায়।

জিএনইউ মেক ব্যবহার করার জন্য, আমাদের কিছু নিয়মের সেট থাকা দরকার যা আমাদের প্রোগ্রামে বিভিন্ন ফাইলের মধ্যে সম্পর্ককে সংজ্ঞায়িত করে এবং প্রতিটি ফাইল আপডেট করার জন্য আদেশ দেয়। এগুলিকে একটি বিশেষ ফাইলে লেখা রয়েছে যার নাম ‘ মেকফিল ’। ‘ মেক ’ কমান্ডটি " মেকফিল " ডেটা বেস এবং ফাইলগুলির শেষ সংশোধন সময়গুলি ব্যবহার করে কোন ফাইলগুলি পুনরায় সংযুক্ত করতে হবে তা নির্ধারণ করে।

একটি মেকফিলের বিষয়বস্তু

সাধারণত ‘ মেকফিলস ‘ তে 5 ধরণের জিনিস থাকে: অন্তর্ভুক্ত বিধি, সুস্পষ্ট বিধি, পরিবর্তনশীল সংজ্ঞা, নির্দেশনা এবং মন্তব্য।

  1. একটি সুস্পষ্ট নিয়ম কীভাবে এক বা একাধিক ফাইল তৈরি করতে/পুনরায় তৈরি করতে হবে (লক্ষ্যগুলি বলা হয়, পরে তা ব্যাখ্যা করা হবে) এবং কখন তা করতে হবে তা সুনির্দিষ্ট করে
  2. একটি অন্তর্ভুক্ত নিয়ম তাদের নামের উপর ভিত্তি করে এক বা একাধিক ফাইল কীভাবে তৈরি/পুনরায় তৈরি করতে হবে তা নির্দিষ্ট করে। এটি বর্ণনা করে যে কোনও টার্গেটের ফাইলের নামের সাথে লক্ষ্যটির অনুরূপ নামের সাথে একটি ফাইল কীভাবে সম্পর্কিত।
  3. একটি পরিবর্তনশীল সংজ্ঞা হ'ল একটি লাইন যা পরবর্তীতে পরিবর্তিত হওয়ার জন্য একটি ভেরিয়েবলের জন্য একটি স্ট্রিং মান নির্দিষ্ট করে
  4. একটি নির্দেশ মেকফিলটি পড়ার সময় বিশেষ কিছু করার জন্য নির্দেশ is
  5. একটি ‘#’ প্রতীক ব্যবহৃত হয় মন্তব্য এর ভিতরে মেকফিলস এর প্রতিনিধিত্ব করে। ‘#’ দিয়ে শুরু হওয়া একটি লাইন কেবল এড়ানো হবে।

তৈরি করুন কে যে সিস্টেমটি পুনরায় সংকলন করতে হয় তার তথ্যগুলি মেকফিল নামক ডেটা বেস পড়ার মাধ্যমে আসে। একটি সাধারণ মেকফিল এ নিম্নলিখিত সিনট্যাক্সের বিধি থাকবে will

target ... : prerequisites ... 
	recipe 
... 
...

একটি লক্ষ্য প্রোগ্রাম দ্বারা উত্পন্ন আউটপুট ফাইল হিসাবে সংজ্ঞায়িত করা হয়। এটি মজাদার লক্ষ্যগুলিও হতে পারে , যা নীচে ব্যাখ্যা করা হবে। টার্গেট ফাইলগুলির উদাহরণগুলির মধ্যে এক্সিকিউটেবল, অবজেক্ট ফাইল বা ক্লিন , ইনস্টল , আনইনস্টল ইত্যাদির মতো ফনি টার্গেট অন্তর্ভুক্ত থাকে etc.

একটি পূর্বশর্ত হ'ল একটি ফাইল যা লক্ষ্য ফাইলগুলি তৈরি করতে ইনপুট হিসাবে ব্যবহৃত হয়।

একটি রেসিপি হ'ল পূর্বশর্তগুলির উপর ভিত্তি করে লক্ষ্য ফাইল তৈরি করার জন্য তৈরি সম্পাদন action মেকফিলস এর প্রতিটি রেসিপিটির আগে ট্যাব চরিত্রটি রাখা দরকার যদি আমরা ‘.RECIPEPREFIX’ ভেরিয়েবলটিকে রেসিপিটির উপসর্গ হিসাবে সংজ্ঞায়িত করতে না পারি।

final: main.o end.o inter.o start.o
	gcc -o final main.o end.o inter.o start.o
main.o: main.c global.h
	gcc -c main.c
end.o: end.c local.h global.h
	gcc -c end.c
inter.o: inter.c global.h
	gcc -c inter.c
start.o: start.c global.h
	gcc -c start.c
clean:
	rm -f main.o end.o inter.o start.o

উপরের উদাহরণে আমরা কার্যকর কার্যকর চূড়ান্ত তৈরির জন্য 4 টি উত্স ফাইল এবং দুটি শিরোলেখ ফাইল ব্যবহার করি। এখানে প্রতিটি ‘.o’ ফাইল হ'ল মেকফিল র মধ্যে একটি লক্ষ্য এবং পূর্বশর্ত উভয়। এখন সর্বশেষ লক্ষ্য নামটি দেখুন ক্লিন । এটি একটি লক্ষ্য ফাইলের চেয়ে কেবল একটি ক্রিয়া।

সংকলনের সময় যেহেতু সাধারণত আমাদের এটির প্রয়োজন হয় না, তাই এটি অন্য কোনও নিয়মের পূর্বশর্ত হিসাবে লেখা হয় না। লক্ষ্যগুলি যা ফাইলগুলিকে উল্লেখ করে না তবে কেবল ক্রিয়া হয় তাকে ফনি টার্গেট বলে। অন্যান্য টার্গেট ফাইল হিসাবে তাদের কোনও পূর্বশর্ত থাকবে না।

ডিফল্টরূপে মেক প্রথম লক্ষ্যটি শুরু হয় ‘ মেকফিল ’ এ এবং এটি ‘ ডিফল্ট লক্ষ্য ’ নামে পরিচিত। আমাদের উদাহরণ বিবেচনা করে, আমাদের প্রথম লক্ষ্য হিসাবে চূড়ান্ত আছে। যেহেতু এর পূর্বশর্তগুলিতে অন্যান্য বস্তু ফাইলগুলি অন্তর্ভুক্ত রয়েছে সেগুলি চূড়ান্ত তৈরি করার আগে আপডেট করা উচিত। এই প্রতিটি পূর্বশর্ত তাদের নিজস্ব নিয়ম অনুযায়ী প্রক্রিয়া করা হয়।

উত্স ফাইল বা শিরোলেখ ফাইলগুলিতে পরিবর্তনগুলি করা হয়েছে বা যদি অবজেক্ট ফাইলটি একেবারেই উপস্থিত না থাকে তবে পুনরায় সংশ্লেষণ ঘটে। প্রয়োজনীয় অবজেক্ট ফাইলগুলি পুনরায় সংবিধানের পরে তৈরি চূড়ান্ত কে পুনরায় সংযুক্ত করতে হবে কিনা তা স্থির করে। চূড়ান্ত ফাইলটি উপস্থিত না থাকলে বা অবজেক্ট ফাইলগুলির কোনও এটির চেয়েও নতুন হলে এটি করতে হবে।

সুতরাং আমরা যদি আন্তঃআর। তারপরে চূড়ান্ত লিঙ্ক করুন।

আমাদের উদাহরণস্বরূপ, নীচে প্রদর্শিত হিসাবে চূড়ান্ত র জন্য আমাদের বিধিগুলিতে দু'বার সমস্ত অবজেক্ট ফাইল তালিকাভুক্ত করতে হয়েছিল।

final: main.o end.o inter.o start.o
	gcc -o final main.o end.o inter.o start.o

এই জাতীয় সদৃশতা এড়াতে, আমরা মেকফিল র মধ্যে ব্যবহৃত অবজেক্ট ফাইলগুলির তালিকা সঞ্চয় করতে ভেরিয়েবলগুলি প্রবর্তন করতে পারি। ভেরিয়েবল ওবিজে ব্যবহার করে আমরা নীচে দেখানো একটি অনুরূপ মেকফিল নমুনাটি আবার লিখতে পারি।

OBJ = main.o end.o inter.o start.o
final: $(OBJ)
	gcc -o final $(OBJ)
main.o: main.c global.h
	gcc -c main.c
end.o: end.c local.h global.h
	gcc -c end.c
inter.o: inter.c global.h
	gcc -c inter.c
start.o: start.c global.h
	gcc -c start.c
clean:
	rm -f $(OBJ)

যেমন আমরা মেকফিল উদাহরণে দেখেছি, সংকলনের পরে অযাচিত অবজেক্ট ফাইলগুলি সরিয়ে উত্স ডিরেক্টরিটি পরিষ্কার করার নিয়মগুলি আমরা সংজ্ঞায়িত করতে পারি। মনে করুন আমাদের কাছে ক্লিন নামক একটি টার্গেট ফাইল রয়েছে। তৈরি কীভাবে উপরের দুটি পরিস্থিতির পার্থক্য করতে পারে? এখানে কল্পনা লক্ষ্য আসে।

স্বল্প লক্ষ্য হ'ল এটি কোনও ফাইলের নাম নয়, যখনই মেকফিল থেকে স্পষ্ট অনুরোধ করা হয় তখনই এটি একটি রেসিপি কার্যকর করার নাম মাত্র। ফনি টার্গেট ব্যবহারের একটি প্রধান কারণ হ'ল একই নামের কোনও ফাইলের সাথে দ্বন্দ্ব এড়ানো। অন্যান্য কারণ কর্মক্ষমতা উন্নতি হয়।

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

.PHONY: clean
clean:
	rm -f $(OBJ)

এখন আপনার নিজের কোড বেসের জন্য মেকফিলগুলি তৈরি করার চেষ্টা করুন। আপনার সন্দেহ নিয়ে এখানে নির্দ্বিধায় মন্তব্য করুন।