এটি হল makepp_build_algorithm কমান্ড যা আমাদের একাধিক বিনামূল্যের অনলাইন ওয়ার্কস্টেশন যেমন উবুন্টু অনলাইন, ফেডোরা অনলাইন, উইন্ডোজ অনলাইন এমুলেটর বা MAC OS অনলাইন এমুলেটর ব্যবহার করে OnWorks ফ্রি হোস্টিং প্রদানকারীতে চালানো যেতে পারে।
কার্যক্রম:
NAME এর
makepp_build_algorithm -- কিভাবে makepp একটি মেকফাইল চালায়
বর্ণনাঃ
মেকেপের ইন্টারনালগুলি মৌলিক উপায়ে স্ট্যান্ডার্ড ইউনিক্সের থেকে আলাদা। এই পৃষ্ঠা
বিভিন্ন দর্শনের বিস্তারিত বর্ণনা করে।
বিপরীত বনাম অগ্রবর্তী অনুমান
মেকপ স্ট্যান্ডার্ড ইউনিক্স মেক থেকে বিপরীত দিকে কাজ করে। ঐতিহ্যবাহী ইউনিক্স তৈরি
নির্মাণের জন্য একটি লক্ষ্য দেওয়া হয়, এবং তারপর এটি একটি নিয়ম খুঁজে পায় যা অক্ষরের সাথে মেলে
টার্গেট ফাইলের নাম। লক্ষ্যমাত্রা তার চেয়ে পুরনো কোনো নিয়মে নির্ভরশীল হলে তা
পুনর্নির্মিত হয়।
উদাহরণস্বরূপ, এই প্যাটার্ন নিয়ম বিবেচনা করুন:
%.o: %.cxx
$(CXX) $(CXXFLAGS)-c $(ইনপুট) -o $(আউটপুট)
যখন মেক বুঝতে পারে যে এটিকে "xyz.o" নামে একটি ফাইল তৈরি করতে হবে, তখন এটি তার তালিকার মাধ্যমে অনুসন্ধান করে
প্যাটার্ন নিয়ম যতক্ষণ না এটি দেখতে পায় যে "xyz.o" প্যাটার্ন "%.o" এর সাথে মেলে, এবং তারপর এটি প্রযোজ্য
এই নিয়ম।
Makepp বিপরীত দিকে কাজ করে। এটি প্রথমে সমস্ত ফাইল গণনা করে যা এটি সম্ভবত করতে পারে
নির্ভরতা ফাইলের নামের অক্ষরের সাথে মেলে এমন নিয়ম প্রয়োগ করে তৈরি করুন। তারপর যখন
এটিকে একটি ফাইল তৈরি করতে হবে, এটি কেবল এটিই জানে যে এটি ফাইলগুলির মধ্যে একটি কিনা তা দেখায়৷
কি করে নির্মাণ করতে হবে. পরিচিত ফাইলের তালিকা পরম ফাইল নামের উপর ভিত্তি করে সংরক্ষণ করা হয়.
যখন makepp উপরের প্যাটার্ন নিয়মের মুখোমুখি হয়, তখন এটি ডিরেক্টরির সমস্ত ফাইল অনুসন্ধান করে
"%.cxx" (অর্থাৎ, "*.cxx") প্যাটার্নের সাথে মিলে যাচ্ছে। এই ফাইলগুলির প্রতিটির জন্য, এটি তখন মনে রাখে
যে এটি সংশ্লিষ্ট ".o" ফাইল তৈরি করতে পারে। যদি পরবর্তীতে makepp তা আবিষ্কার করে
অন্য একটি ".cxx" ফাইল তৈরি করতে পারে যা বর্তমানে বিদ্যমান নেই, এই নিয়মটিও প্রযোজ্য হবে৷
এবং সংশ্লিষ্ট ".o" ফাইলটি চিহ্নিত করা হবে।
এটি কিছুটা অকার্যকর বলে মনে হতে পারে, তবে এটি বেশিরভাগ ক্ষেত্রে ধীরগতির নয়,
এবং এটি প্রায়শই সত্য যে কার্যত সমস্ত ফাইল যা তৈরি করা যেতে পারে বাস্তবে নির্মিত।
এবং তৈরি করা যেতে পারে এমন ফাইলগুলির সম্পূর্ণ তালিকা জানার বেশ কয়েকটি সুবিধা রয়েছে:
ওয়াইল্ডকার্ডগুলি এমন ফাইলগুলির সাথে মিলিত হতে পারে যা এখনও বিদ্যমান নেই তবে তৈরি করা যেতে পারে৷
স্বয়ংক্রিয় নির্ভরতা স্ক্যানার দ্বারা সনাক্ত করা হেডার ফাইল নেই
অস্তিত্ব থাকা; makepp জানে তারা কোথায় থাকবে। (এই সমস্যার বেশিরভাগ অন্যান্য সমাধান
অনুমান করুন যে কোনও শিরোনাম যা এখনও বিদ্যমান নেই তা বর্তমান ডিরেক্টরিতে রয়েছে।)
· রিপোজিটরিগুলি বাস্তবায়ন করা অনেক সহজ কারণ makepp আগে থেকেই জানে এটি কী ফাইল করে
তৈরি করতে পারেন। (বিশদ বিবরণের জন্য makepp_repositories দেখুন।)
কোন ফাইলগুলি তৈরি করা যেতে পারে তা সহজেই নির্ধারণ করা সম্ভব (দেখুন
"$(only_targets )" ফাংশন।
· মেকেপের "$(infer_objects)" ফাংশনটি বস্তুগুলি কী তা জানার মাধ্যমে ব্যাপকভাবে সরলীকৃত হয়
পাওয়া যায়.
নথি পত্র বনাম পাঠগত নিদর্শন
Makepp সহযোগীরা একটি টার্গেট ফাইল দিয়ে কমান্ড তৈরি করে, a এর জন্য একটি টেক্সচুয়াল প্যাটার্নে নয়
ফাইলের নাম। তাই একই ফাইলের জন্য বিভিন্ন নামের দ্বারা বিভ্রান্ত হয় না। এইভাবে, জন্য
উদাহরণস্বরূপ, makepp জানবে যে "./xyz" এবং এবং "xyz" একই ফাইল, যেখানে অন্যান্য মেক
ইউটিলিটি নাও হতে পারে।
এটি বিশেষভাবে গুরুত্বপূর্ণ কারণ (স্ট্যান্ডার্ড মেকের বিপরীতে) makepp মেকফাইলগুলি লোড করে
বিভিন্ন ডিরেক্টরি থেকে। যাতে makefiles অপেক্ষাকৃত স্বাধীন হতে, সঙ্গে
উচ্চ-স্তরের মেকফাইলকে কোন বিশেষ অবস্থান দেওয়া হয়নি, প্রতিটি মেকফাইল সমস্ত ফাইলকে বোঝায়
তার নিজস্ব ডিরেক্টরির সাথে সম্পর্কিত। এইভাবে আপনি যদি সাবডিরেক্টরি থেকে একটি মেকফাইল লোড করেন
"other_stuff", এবং সেই মেকফাইলটি "../xyz" বোঝায়, makepp আবার বুঝতে পারবে যে এটি
একই ফাইল উপরে উল্লেখ করা হয়েছে. (এটি নরম-লিঙ্কযুক্ত ডিরেক্টরি দ্বারা বিভ্রান্ত হবে না
নাম।)
সঞ্চিত নির্মাণ করা তথ্য
Makepp প্রতিটি ফাইল সম্পর্কে আরও অনেক তথ্য সঞ্চয় করে যা এটি শুধুমাত্র তারিখের বাইরে তৈরি করে
স্ট্যাম্প (যা স্ট্যান্ডার্ড তৈরি করে তা সবই)। এই তথ্য অন্তর্ভুক্ত:
· শেষ বিল্ডে এই ফাইলটির স্বাক্ষর, তাই আমরা জানি যে ফাইলটি নিজেই আছে কিনা
পরিবর্তন করেছেন।
· প্রতিটি নির্ভরতা ফাইলের নাম, ফাইল এবং অন্যান্য অনুমানকৃত ফাইলগুলি অন্তর্ভুক্ত করে
স্বয়ংক্রিয়ভাবে. যদি এই তালিকাটি পরিবর্তিত হয়, তাহলে makepp অনুমান করে যে এটি পুনর্নির্মাণ করা দরকার।
· প্রতিটি নির্ভরতার স্বাক্ষর। এই ভাবে, makepp পুনর্নির্মাণ করতে জানে না শুধুমাত্র যখন
নির্ভরতা লক্ষ্যের চেয়ে নতুন, কিন্তু যখন তারা একেবারেই পরিবর্তিত হয়। এটাও করে
অন্য ধরনের স্বাক্ষর ব্যবহার করা সম্ভব, যেমন ক্রিপ্টোগ্রাফিক চেকসাম, বরং
ফাইলের তারিখের চেয়ে।
· সম্পূর্ণ বিল্ড কমান্ড (এবং এর cwd)। এইভাবে আপনি যদি বিল্ড কমান্ড পরিবর্তন করেন
(উদাহরণস্বরূপ, কম্পাইলার বিকল্পগুলি পরিবর্তন করুন), makepp ফাইলগুলি পুনঃনির্মাণ করতে জানে
নিজেদের পরিবর্তন হয়নি।
· স্থাপত্য. আপনি যদি লিনাক্সে আপনার প্রোগ্রাম কম্পাইল করে থাকেন এবং তারপরে স্যুইচ করুন
সোলারিস, মেকপ স্বয়ংক্রিয়ভাবে সবকিছু পুনরায় কম্পাইল করতে জানে।
Makepp প্রতিটি ডিরেক্টরিতে একটি সাবডিরেক্টরি তৈরি করে যা এটি স্পর্শ করে ".makepp" নামে পরিচিত। দ্য
একটি ফাইলের জন্য তথ্য তৈরি করুন ফাইলের নাম একটি ডিরেক্টরিতে সংরক্ষণ করা হয় .makepp/filename। যদি
আপনি এই সাবডিরেক্টরি মুছে ফেলুন বা ফাইলগুলি পরিবর্তন করুন, makepp সমস্ত প্রভাবিত ফাইল পুনর্নির্মাণ করবে।
অন্তর্নিহিত বোঝাই
যদি মেকপপ একটি ডিরেক্টরিতে একটি লক্ষ্য তৈরি করার চেষ্টা করে এবং এটির জন্য এখনও কোনও নিয়ম না থাকে,
অথবা যদি এটি একটি ডিরেক্টরির মধ্যে একটি ওয়াইল্ডকার্ডের সাথে মিলে যাওয়া ফাইলগুলি খুঁজছে, তাহলে এটি দেখতে পাবে৷
একটি মেকফাইল উপস্থিত আছে কিনা তা দেখতে ডিরেক্টরি। যদি তাই হয়, makefile লোড করা হবে
স্বয়ংক্রিয়ভাবে.
এর মানে হল যে আপনাকে সাধারণত makepp-কে স্পষ্টভাবে বলতে হবে না যে কোথায় পাওয়া যাবে
makefiles--আপনাকে যা করতে হবে তা হল অন্য ডিরেক্টরিতে একটি ফাইল রেফার করা এবং makepp করবে
স্বয়ংক্রিয়ভাবে এটি কীভাবে তৈরি করা যায় তা বের করুন।
অন্তর্নিহিত লোডিং তখনই ঘটবে যদি ডিরেক্টরিটি আপনার কাছে লেখার যোগ্য হয়। এইভাবে আপনি যদি চান
মেকপ্পকে এমন একগুচ্ছ জিনিস তৈরি করার চেষ্টা করা থেকে আটকান যা কখনই পরিবর্তন হয় না, সহজভাবে তৈরি করুন
শুধুমাত্র পঠনযোগ্য ডিরেক্টরি।
আপনি যদি একটি গাছের নীচে থাকেন তবে অন্তর্নিহিত লোডিং ঘটবে না RootMakeppfile(.mk) এবং
অন্য মেকফাইল সেই গাছের বাইরে। আপনি যদি একবার এটি চান, আপনি একটি দিতে পারেন
"--do-build=/" মেকপ-এর বিকল্প, গাছের বাইরের সবকিছু নির্মাণযোগ্য করে তুলতে। আপনি যদি
সর্বদা এটি চান, আপনি গাছের মধ্যে কোথাও একটি "load_makefile" বিবৃতি রাখতে পারেন
স্পষ্টভাবে এটি গাছের সাথে সংযুক্ত করুন।
যদি অন্তর্নিহিত লোডিং আপনার পথে আসে (যেমন, makepp অনেকগুলি মেকফাইল লোড করে এবং এটি নষ্ট করে
সময়, অন্যথায় আপনি সত্যিই এটিতে বর্ণিত সমস্ত জিনিস পুনর্নির্মাণের চেষ্টা করতে চান না
makefiles), আপনি "--noimplicit_load" কমান্ড ব্যবহার করে সমস্ত ডিরেক্টরির জন্য এটি বন্ধ করতে পারেন
লাইন বিকল্প, অথবা আপনি "no_implicit_load" ব্যবহার করে নির্বাচিত ডিরেক্টরিগুলির জন্য এটি বন্ধ করতে পারেন
আপনার makefile বিবৃতি.
onworks.net পরিষেবা ব্যবহার করে makepp_build_algorithm অনলাইন ব্যবহার করুন