ওয়ার্কস্পেস, প্যাকেজ এবং লক্ষ্য

Bazel একটি ওয়ার্কস্পেস নামক ডিরেক্টরি ট্রিতে সংগঠিত সোর্স কোড থেকে সফ্টওয়্যার তৈরি করে। ওয়ার্কস্পেসে সোর্স ফাইলগুলি প্যাকেজের একটি নেস্টেড হায়ারার্কিতে সংগঠিত হয়, যেখানে প্রতিটি প্যাকেজ একটি ডিরেক্টরি যাতে সম্পর্কিত সোর্স ফাইলগুলির একটি সেট এবং একটি BUILD ফাইল থাকে। BUILD ফাইলটি নির্দিষ্ট করে যে উৎস থেকে কোন সফ্টওয়্যার আউটপুট তৈরি করা যেতে পারে।

কর্মক্ষেত্র

একটি ওয়ার্কস্পেস হল আপনার ফাইল সিস্টেমের একটি ডিরেক্টরি ট্রি যাতে আপনি যে সফ্টওয়্যারটি তৈরি করতে চান তার জন্য সোর্স ফাইল রয়েছে৷ প্রতিটি কর্মক্ষেত্রে WORKSPACE নামে একটি পাঠ্য ফাইল থাকে যা খালি হতে পারে, বা আউটপুট তৈরি করার জন্য প্রয়োজনীয় বাহ্যিক নির্ভরতার উল্লেখ থাকতে পারে।

WORKSPACE নামক একটি ফাইল ধারণকারী ডিরেক্টরিগুলিকে একটি ওয়ার্কস্পেসের মূল হিসাবে বিবেচনা করা হয়। তাই, Bazel একটি ওয়ার্কস্পেস ফাইল ধারণকারী একটি WORKSPACE রুট করা একটি ওয়ার্কস্পেসের যেকোন ডিরেক্টরি গাছকে উপেক্ষা করে, কারণ তারা অন্য একটি ওয়ার্কস্পেস তৈরি করে।

এছাড়াও Bazel WORKSPACE ফাইলকে WORKSPACE.bazel ফাইলের একটি উপনাম হিসাবে সমর্থন করে। উভয় ফাইল বিদ্যমান থাকলে, WORKSPACE.bazel ব্যবহার করা হয়।

ভান্ডার

কোড সংগ্রহস্থলে সংগঠিত হয়। WORKSPACE ফাইল ধারণকারী ডিরেক্টরি হল মূল সংগ্রহস্থলের মূল, যাকে @ বলা হয়। অন্যান্য, (বাহ্যিক) সংগ্রহস্থলগুলি WORKSPACE ফাইলে ওয়ার্কস্পেস নিয়ম ব্যবহার করে সংজ্ঞায়িত করা হয়েছে।

Bazel এর সাথে বান্ডেল করা ওয়ার্কস্পেস নিয়মগুলি বিল্ড এনসাইক্লোপিডিয়ার ওয়ার্কস্পেস নিয়ম বিভাগে এবং এমবেডেড স্টারলার্ক রিপোজিটরি নিয়মের ডকুমেন্টেশনে নথিভুক্ত করা হয়েছে।

যেহেতু বাহ্যিক সংগ্রহস্থলগুলি নিজেই সংগ্রহস্থল, সেগুলিতে প্রায়শই একটি WORKSPACE ফাইলও থাকে। যাইহোক, এই অতিরিক্ত WORKSPACE ফাইলগুলি Bazel দ্বারা উপেক্ষা করা হয়। বিশেষ করে, ট্রানজিটিভের উপর নির্ভরশীল সংগ্রহস্থলগুলি স্বয়ংক্রিয়ভাবে যোগ করা হয় না।

প্যাকেজ

একটি সংগ্রহস্থলে কোড সংগঠনের প্রাথমিক একক হল প্যাকেজ । একটি প্যাকেজ হল সম্পর্কিত ফাইলগুলির একটি সংগ্রহ এবং আউটপুট আর্টিফ্যাক্টগুলি তৈরি করতে কীভাবে সেগুলি ব্যবহার করা যেতে পারে তার একটি স্পেসিফিকেশন।

একটি প্যাকেজ BUILD (বা BUILD.bazel ) নামের একটি ফাইল ধারণকারী একটি ডিরেক্টরি হিসাবে সংজ্ঞায়িত করা হয়। একটি প্যাকেজ তার ডিরেক্টরির সমস্ত ফাইল এবং এর নীচে থাকা সমস্ত সাবডিরেক্টরিগুলিকে অন্তর্ভুক্ত করে, যেগুলির মধ্যে একটি BUILD ফাইল রয়েছে তা ছাড়া৷ এই সংজ্ঞা থেকে, কোনো ফাইল বা ডিরেক্টরি দুটি ভিন্ন প্যাকেজের অংশ হতে পারে না।

উদাহরণস্বরূপ, নিম্নলিখিত ডিরেক্টরি গাছে দুটি প্যাকেজ রয়েছে, my/app , এবং subpackage my/app/tests । মনে রাখবেন যে my/app/data একটি প্যাকেজ নয়, কিন্তু প্যাকেজ my/app এর সাথে সম্পর্কিত একটি ডিরেক্টরি।

src/my/app/BUILD
src/my/app/app.cc
src/my/app/data/input.txt
src/my/app/tests/BUILD
src/my/app/tests/test.cc

টার্গেট

একটি প্যাকেজ হল লক্ষ্যগুলির একটি ধারক, যা প্যাকেজের BUILD ফাইলে সংজ্ঞায়িত করা হয়। বেশিরভাগ লক্ষ্য দুটি প্রধান ধরনের, ফাইল এবং নিয়মগুলির মধ্যে একটি।

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

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

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

একটি নিয়মের ইনপুটগুলিতে অন্যান্য নিয়মগুলিও অন্তর্ভুক্ত থাকতে পারে। এই ধরনের সম্পর্কের সুনির্দিষ্ট অর্থ প্রায়শই বেশ জটিল এবং ভাষা- বা নিয়ম-নির্ভর, কিন্তু স্বজ্ঞাতভাবে এটি সহজ: একটি C++ লাইব্রেরি নিয়ম A-তে ইনপুটের জন্য অন্য C++ লাইব্রেরি নিয়ম B থাকতে পারে। এই নির্ভরতার প্রভাব হল B এর হেডার ফাইলগুলি সংকলনের সময় A এর কাছে উপলব্ধ, B এর প্রতীকগুলি লিঙ্ক করার সময় A এর কাছে উপলব্ধ এবং B এর রানটাইম ডেটা সম্পাদনের সময় A এর কাছে উপলব্ধ।

সমস্ত নিয়মের একটি পরিবর্তন হল যে একটি নিয়ম দ্বারা উত্পন্ন ফাইলগুলি সর্বদা নিয়মের মতো একই প্যাকেজের অন্তর্গত; অন্য প্যাকেজে ফাইল তৈরি করা সম্ভব নয়। যদিও একটি নিয়মের ইনপুট অন্য প্যাকেজ থেকে আসা অস্বাভাবিক নয়।

প্যাকেজ গোষ্ঠীগুলি হল প্যাকেজের সেট যার উদ্দেশ্য হল নির্দিষ্ট নিয়মের অ্যাক্সেসযোগ্যতা সীমিত করা। প্যাকেজ গ্রুপ package_group ফাংশন দ্বারা সংজ্ঞায়িত করা হয়। তাদের তিনটি বৈশিষ্ট্য রয়েছে: তাদের মধ্যে থাকা প্যাকেজের তালিকা, তাদের নাম এবং অন্যান্য প্যাকেজ গ্রুপগুলি তারা অন্তর্ভুক্ত করে। নিয়মের visibility বৈশিষ্ট্য বা package ফাংশনের default_visibility অ্যাট্রিবিউট থেকে তাদের উল্লেখ করার একমাত্র অনুমোদিত উপায়; তারা ফাইল তৈরি বা ব্যবহার করে না। আরও তথ্যের জন্য, package_group ডকুমেন্টেশন পড়ুন।

লেবেল