এগুলি লেখার এক্সটেনশনের সাথে কিছু সাধারণ সমস্যা এবং প্রশ্ন।
কেন আমার ফাইল উত্পাদিত হয় না/আমার ক্রিয়া কখনই কার্যকর হয় না?
Bazel শুধুমাত্র অনুরোধ করা আউটপুট ফাইল তৈরি করার জন্য প্রয়োজনীয় ক্রিয়াগুলি সম্পাদন করে।
আপনি যে ফাইলটি চান সেটিতে লেবেল থাকলে, আপনি সরাসরি এটির জন্য অনুরোধ করতে পারেন:
bazel build //pkg:myfile.txt
ফাইলটি টার্গেটের একটি আউটপুট গ্রুপে থাকলে, আপনাকে কমান্ড লাইনে সেই আউটপুট গ্রুপটি নির্দিষ্ট করতে হতে পারে:
bazel build //pkg:mytarget --output_groups=foo
আপনি যদি চান যে যখনই কমান্ড লাইনে আপনার টার্গেট উল্লেখ করা হয় তখন ফাইলটি স্বয়ংক্রিয়ভাবে তৈরি হয়, তাহলে একটি
DefaultInfo
প্রদানকারীকে ফিরিয়ে দিয়ে আপনার নিয়মের ডিফল্ট আউটপুটগুলিতে এটি যোগ করুন।
আরও তথ্যের জন্য নিয়ম পৃষ্ঠা দেখুন।
কেন আমার বাস্তবায়ন ফাংশন কার্যকর করা হয় না?
Bazel শুধুমাত্র বিল্ডের জন্য অনুরোধ করা লক্ষ্যগুলি বিশ্লেষণ করে। আপনার হয় কমান্ড লাইনে লক্ষ্যের নাম দেওয়া উচিত, অথবা এমন কিছু যা লক্ষ্যের উপর নির্ভর করে।
আমার অ্যাকশন বা বাইনারি চালানো হলে একটি ফাইল অনুপস্থিত
নিশ্চিত করুন যে 1) ফাইলটি অ্যাকশন বা বাইনারিতে একটি ইনপুট হিসাবে নিবন্ধিত হয়েছে এবং 2) যে স্ক্রিপ্ট বা টুলটি কার্যকর করা হচ্ছে সেটি সঠিক পথ ব্যবহার করে ফাইলটি অ্যাক্সেস করছে৷
কর্মের জন্য, আপনি ctx.actions.*
ফাংশনে প্রেরণ করে ইনপুট ঘোষণা করেন যা ক্রিয়া তৈরি করে। ফাইলের জন্য সঠিক পথ File.path
ব্যবহার করে প্রাপ্ত করা যেতে পারে।
বাইনারিগুলির জন্য (একটি bazel run
বা bazel test
কমান্ড দ্বারা চালিত এক্সিকিউটেবল আউটপুট), আপনি রানফাইলে অন্তর্ভুক্ত করে ইনপুটগুলি ঘোষণা করেন। path
ক্ষেত্রটি ব্যবহার করার পরিবর্তে, File.short_path
ব্যবহার করুন, যা রানফাইল ডিরেক্টরির সাথে সম্পর্কিত ফাইলের পাথ যেখানে বাইনারি কার্যকর করে।
bazel build //pkg:mytarget
দ্বারা কোন ফাইল তৈরি করা হয় তা আমি কীভাবে নিয়ন্ত্রণ করতে পারি?
ডিফল্ট আউটপুট সেট করতে DefaultInfo
প্রদানকারী ব্যবহার করুন।
আমি কিভাবে একটি প্রোগ্রাম চালাতে পারি বা আমার বিল্ডের অংশ হিসাবে I/O ফাইল করতে পারি?
আপনার বিল্ডের অন্যান্য অংশের মতোই একটি টুলকে লক্ষ্য হিসাবে ঘোষণা করা যেতে পারে এবং অন্যান্য লক্ষ্যগুলি তৈরি করতে সহায়তা করার জন্য কার্যকরী পর্যায়ে চালানো যেতে পারে। একটি টুল চালানোর জন্য একটি অ্যাকশন তৈরি করতে, ctx.actions.run ব্যবহার করুন এবং executable
প্যারামিটার হিসেবে ctx.actions.run
পাস করুন।
লোডিং এবং বিশ্লেষণের পর্যায়গুলির সময়, একটি টুল চলতে পারে না , বা আপনি ফাইল I/O সম্পাদন করতে পারবেন না। এর মানে হল যে টুল এবং ফাইলের বিষয়বস্তু (BUILD এবং .bzl ফাইলের বিষয়বস্তু ব্যতীত) লক্ষ্য এবং অ্যাকশন গ্রাফগুলি কীভাবে তৈরি হয় তা প্রভাবিত করতে পারে না।
এক্সিকিউশন পর্বের আগে এবং সময় উভয় ক্ষেত্রেই যদি একই স্ট্রাকচার্ড ডেটা অ্যাক্সেস করতে হয়?
আপনি স্ট্রাকচার্ড ডেটাকে .bzl ফাইল হিসাবে ফর্ম্যাট করতে পারেন। আপনি load()
ফাইলটি লোডিং এবং বিশ্লেষণের পর্যায়গুলিতে অ্যাক্সেস করতে পারেন। আপনি এটিকে একটি ইনপুট বা রানফাইল হিসাবে অ্যাকশন এবং এক্সিকিউটেবলগুলিতে প্রেরণ করতে পারেন যেগুলি সম্পাদনের পর্যায়ে এটির প্রয়োজন হয়।
আমি কিভাবে স্টারলার্ক কোড নথিভুক্ত করব?
নিয়ম এবং নিয়মের বৈশিষ্ট্যগুলির জন্য, আপনি rule
বা attr.*()
এর doc
প্যারামিটারে একটি ডকস্ট্রিং লিটারাল (সম্ভবত ট্রিপল-উদ্ধৃত) পাস করতে পারেন। সহায়ক ফাংশন এবং ম্যাক্রোর জন্য, এখানে দেওয়া বিন্যাস অনুসরণ করে একটি ট্রিপল-উদ্ধৃত ডকস্ট্রিং আক্ষরিক ব্যবহার করুন। নিয়ম বাস্তবায়ন ফাংশন সাধারণত তাদের নিজস্ব ডকস্ট্রিং প্রয়োজন হয় না.
প্রত্যাশিত জায়গায় স্ট্রিং লিটারেল ব্যবহার করা স্বয়ংক্রিয় টুলিংয়ের জন্য ডকুমেন্টেশন বের করা সহজ করে তোলে। স্ট্যান্ডার্ড নন-স্ট্রিং মন্তব্যগুলি যেখানেই এটি আপনার কোডের পাঠককে সাহায্য করতে পারে সেখানে নির্দ্বিধায় ব্যবহার করুন৷