ফাংশন

সামগ্রী

প্যাকেজ

package(default_deprecation, default_testonly, default_visibility, features)

এই ফাংশনটি মেটাডেটা ঘোষণা প্যাকেজের মধ্যে যে পরবর্তী নিয়ম প্রযোজ্য যে। এটা তোলে একবার একটি প্যাকেজ (বিল্ড ফাইল) মধ্যে সর্বাধিক ব্যবহৃত হয়।

প্যাকেজ () ফাংশন সঠিক ফাইল উপরের সব লোড () বিবৃতি পর বলা উচিত, কোনো নিয়ম আগে।

যুক্তি

গুণ বিবরণ
default_visibility

List of labels ; optional

এই প্যাকেজের নিয়ম ডিফল্ট দৃশ্যমানতা।

যদি না অন্যথায় উল্লেখিত এই প্যাকেজে প্রতি নিয়ম, দৃশ্যমানতা এই বৈশিষ্ট্য নির্দিষ্ট হয়েছে visibility শাসনের বৈশিষ্ট্য। এই বৈশিষ্ট্য বাক্য গঠন প্রণালী সম্পর্কে বিস্তারিত তথ্যের জন্য, ডকুমেন্টেশন দেখুন দৃশ্যমানতা । প্যাকেজ ডিফল্ট দৃশ্যমানতা প্রযোজ্য নয় exports_files , যা ডিফল্টভাবে সর্বজনীন।

default_deprecation

String; optional

ডিফল্ট সেট করে deprecation এই প্যাকেজের সমস্ত নিয়ম জন্য বার্তা।

default_testonly

Boolean; optional; default is False except as noted

সেট ডিফল্ট testonly এই প্যাকেজের সমস্ত নিয়ম জন্য সম্পত্তি।

অধীনে প্যাকেজ সালে javatests ডিফল্ট মান 1।

features

List strings; optional

বিভিন্ন পতাকার যে এই বিল্ড ফাইলের শব্দার্থবিদ্যা প্রভাবিত নির্ধারণ করে।

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

উদাহরণ

ঘোষণা নিচে ঘোষণা করে যে এই প্যাকেজের নিয়ম শুধুমাত্র প্যাকেজের দলের সদস্যদের কাছে দৃশ্যমান //foo:target । একটি নিয়ম উপর স্বতন্ত্র দৃশ্যমানতা ঘোষণা, যদি থাকে, এই স্পেসিফিকেশন অগ্রাহ্য করে।
package(default_visibility = ["//foo:target"])

package_group

package_group(name, packages, includes)

এই ফাংশনটি প্যাকেজ একটি সেট সংজ্ঞায়িত করে এবং গ্রুপ একটি লেবেল নির্ধারণ করা হয়। ট্যাগ উল্লেখ করা যেতে পারে visibility বৈশিষ্ট্যাবলী।

প্যাকেজ সংকলন দৃশ্যমানতা নিয়ন্ত্রণ করার জন্য ব্যবহার করা হয়। আপনার এক বা একাধিক প্যাকেজ গোষ্ঠীতে একটি নিয়ম অ্যাক্সেস নিশ্চিত করতে পারেন, সমগ্র উৎস গাছ প্রতিটি নিয়ম, অথবা শুধুমাত্র নিয়ম একই প্যাকেজের মধ্যে ঘোষিত। দৃশ্যমানতা ব্যবস্থার আরো বিস্তারিত বিবরণ জন্য, দেখুন দৃশ্যমানতা অ্যাট্রিবিউট।

যুক্তি

গুণ বিবরণ
name

Name ; required

এই লক্ষ্য জন্য একটি অনন্য নাম।

packages

List of Package ; optional

এই দলের প্যাকেজ সম্পূর্ণ শুমার।

প্যাকেজগুলি তাদের পূর্ণ নাম ব্যবহার করে, একটি ডবল স্ল্যাশ দিয়ে শুরু উল্লেখ করতে হবে। উদাহরণস্বরূপ, //foo/bar/main এই তালিকায় একটি বৈধ উপাদান।

স্পেসিফিকেশন: আপনি ওয়াইল্ডকার্ড উল্লেখ করতে পারেন //foo/... অধীনে নির্দিষ্ট করে যে প্যাকেজ //foo সহ //foo নিজেই।

প্যাকেজ স্পেসিফিকেশনের সঙ্গে পূর্বে সমাধান করা যেতে পারে - অস্বীকৃতি ইঙ্গিত: স্পেসিফিকেশন -//foo/bar/... অধীনে বাদ সমস্ত প্যাকেজ //foo/bar অন্যথায় বর্তমান প্যাকেজ নিদর্শন দ্বারা মেলানো হত package_group । একসঙ্গে সঙ্গে ব্যবহার includes এক প্যাকেজ সংকলনের মধ্যে নেতিবাচক নিদর্শন অন্তর্ভুক্ত প্যাকেজ দলের ফলাফলের প্রভাবিত করে না: প্রতিটি প্যাকেজ গোষ্ঠীর জন্য প্যাকেজ সংকলন নির্ণয় করা হয় এবং তারপর ফলাফল unioned করছে।

এই বৈশিষ্ট্য অনুপস্থিত থাকলে প্যাকেজটি গ্রুপ নিজেই কোন প্যাকেজ উপস্থিত থাকবে (কিন্তু এটি এখনও অন্যান্য প্যাকেজ সংকলন অন্তর্ভুক্ত করতে পারে)।

includes

List of labels ; optional

অন্যান্য প্যাকেজ সংকলন এই এক অন্তর্ভুক্ত করা হয়।

এই বৈশিষ্ট্য লেবেল অন্যান্য প্যাকেজ সংকলন পড়ুন উচিত নয়। রেফারেন্সড প্যাকেজ দলের মধ্যে প্যাকেজগুলি এই প্যাকেজ সংকলনের অংশ হতে নেয়া হয়। এই, যদি প্যাকেজ গ্রুপ, সকর্মক হয় a প্যাকেজ সংকলন রয়েছে b , এবং b প্যাকেজ সংকলন রয়েছে c , প্রতিটি প্যাকেজ c এছাড়াও একজন সদস্য হতে হবে a

উদাহরণ

নিম্নলিখিত package_group ঘোষণা নির্দিষ্ট করে একটি প্যাকেজ গ্রুপ "ক্রান্তীয়" যে গ্রীষ্মমন্ডলীয় ফল ধারণ করে বলা হয়।

package_group(
    name = "tropical",
    packages = [
        "//fruits/mango",
        "//fruits/orange",
        "//fruits/papaya/...",
    ],
)

নিম্নলিখিত ঘোষণা একটি কাল্পনিক আবেদন প্যাকেজ সংকলন উল্লেখ করুন:

package_group(
    name = "fooapp",
    includes = [
        ":controller",
        ":model",
        ":view",
    ],
)

package_group(
    name = "model",
    packages = ["//fooapp/database"],
)

package_group(
    name = "view",
    packages = [
        "//fooapp/swingui",
        "//fooapp/webui",
    ],
)

package_group(
    name = "controller",
    packages = ["//fooapp/algorithm"],
)

exports_files

exports_files([label, ...], visibility, licenses)

exports_files() এই প্যাকেজ আছে যা অন্য প্যাকেজ রপ্তানি করা হয় একাত্মতার ফাইলগুলির একটি তালিকা নির্দিষ্ট করে।

একটি প্যাকেজ জন্য নির্মাণ ফাইলটি শুধুমাত্র যদি তারা স্পষ্টভাবে একটি সঙ্গে রপ্তানি করা হয় আরেকটি প্যাকেজ একাত্মতার সোর্স ফাইল থেকে সরাসরি উল্লেখ করতে পারে exports_files() বিবৃতি। সম্পর্কে আরও পড়ুন ফাইল দৃশ্যমানতা

একটি লিগ্যাসি আচরণ হিসেবে নামেও একটি নিয়ম ইনপুট পতাকা পর্যন্ত ডিফল্ট দৃশ্যমানতা সঙ্গে রপ্তানি করা হয় উল্লেখ ফাইল --incompatible_no_implicit_file_export ফ্লিপ করা হয়। যাইহোক, এই আচরণ পর রান করা উচিত এবং সক্রিয়ভাবে থেকে দূরে চলে আসেন।

যুক্তি

যুক্তি বর্তমান প্যাকেজ মধ্যে ফাইলের নামের একটি তালিকা রয়েছে। একজন দৃশ্যমানতা ঘোষণা নির্দিষ্ট করা যেতে পারে; এই ক্ষেত্রে, ফাইল নির্দিষ্ট লক্ষ্যমাত্রা কাছে দৃশ্যমান হবে। কোন দৃশ্যমানতা নির্দিষ্ট করা থাকে, ফাইল যে প্যাকেজ কাছে দৃশ্যমান হবে, এমনকি যদি একটি প্যাকেজ ডিফল্ট দৃশ্যমানতা উল্লেখিত হয়েছিল package ফাংশন। লাইসেন্স নির্দিষ্ট করা যেতে পারে।

উদাহরণ

নিম্নলিখিত উদাহরণে রপ্তানির golden.txt থেকে একটি টেক্সট ফাইল test_data প্যাকেজ, যাতে অন্য প্যাকেজ ব্যবহার করতে পারে, উদাহরণস্বরূপ, মধ্যে data পরীক্ষার অ্যাট্রিবিউট।

# from //test_data/BUILD

exports_files(["golden.txt"])

উল্লিখিত glob

glob(include, exclude=[], exclude_directories=1, allow_empty=True)

উল্লিখিত glob একটি সাহায্যকারী ফাংশন যে সব ফাইল নির্দিষ্ট পাথ নিদর্শন মেলে, এবং আয় একটি নতুন, চপল, সাজানো তাদের পাথ তালিকা খুঁজে বের করে আছে। একমাত্র উৎস ফাইল (না উত্পন্ন ফাইল কিংবা অন্যান্য লক্ষ্যমাত্রা) জন্য নিজস্ব প্যাকেজের মধ্যে শুধুমাত্র অনুসন্ধানসমূহ ফাইল, এবং সৌন্দর্য উল্লিখিত glob।

একটি উত্স ফাইল এর লেবেল ফলাফলে অন্তর্ভুক্ত ফাইলটি প্যাকেজ-আপেক্ষিক পথের যেকোনো ম্যাচ হয় include নিদর্শন এবং কেউই exclude নিদর্শন।

include এবং exclude তালিকা পথ নিদর্শন যা বর্তমান প্যাকেজে আপেক্ষিক ধারণ করে। প্রতিটি প্যাটার্ন এক বা একাধিক পাথ অংশ গঠিত হতে পারে। ইউনিক্স পাথ সঙ্গে স্বাভাবিক হিসাবে, এই বিভাগগুলিতে দ্বারা বিভক্ত করা হয় / । বিভাগগুলি থাকতে পারে * ওয়াইল্ডকার্ড: এই পথ সেগমেন্ট কোনো সাবস্ট্রিং (এমনকি খালি সাবস্ট্রিং), ডিরেক্টরি বিভাজক ব্যতীত সাথে মেলে / । এই ওয়াইল্ডকার্ড এক পথ বিভাগের মধ্যে থাকা একাধিক বার ব্যবহার করা যাবে। উপরন্তু, ** ওয়াইল্ডকার্ড শূন্য বা তার বেশি সম্পূর্ণ পাথ অংশ মেলাতে পারে, কিন্তু এটা একটি স্বতন্ত্র পাথ সেগমেন্ট হিসেবে ঘোষণা করতে হবে।

উদাহরণ:
  • foo/bar.txt ম্যাচ ঠিক foo/bar.txt এই প্যাকেজের ফাইল
  • foo/*.txt প্রতিটি ফাইল মিলে যায় foo/ ডিরেক্টরির যদি ফাইলটি প্রান্ত .txt (যদি না foo/ একটি উপপ্যাকেজের হয়)
  • foo/a*.htm* প্রতিটি ফাইল মিলে যায় foo/ ডিরেক্টরির দিয়ে শুরু হয় যে a , তারপর একটি অবাধ স্ট্রিং আছে (ফাঁকা হতে পারে), তারপর রয়েছে .htm , এবং অন্য নির্বিচারে স্ট্রিং সঙ্গে প্রান্ত; যেমন foo/axx.htm এবং foo/a.html বা foo/axxx.html
  • **/a.txt প্রত্যেক ম্যাচ a.txt এই প্যাকেজ প্রতিটি সাব ফাইল
  • **/bar/**/*.txt প্রত্যেক ম্যাচ .txt যদি ফলে পথে অন্তত একটি ডিরেক্টরি বলা হয়, এই প্যাকেজ প্রতিটি সাব ফাইলটি bar যেমন xxx/bar/yyy/zzz/a.txt বা bar/a.txt (মনে রাখবেন যে ** এছাড়াও শূন্য অংশ মিলে যায়) অথবা bar/zzz/a.txt
  • ** এই প্যাকেজের প্রতিটি সাব প্রতিটি ফাইল মিলে যায়
  • foo**/a.txt , একটি অবৈধ প্যাটার্ন কারণ ** একটি সেগমেন্ট যেমন তার নিজের উপর দাঁড়াতে হবে

তাহলে exclude_directories যুক্তি সক্রিয় করা হয় (1 সেট), টাইপ ডিরেক্টরি ফাইল ফলাফল (ডিফল্ট 1) থেকে বাদ দেওয়া হবে।

তাহলে allow_empty যুক্তি সেট করা হয় False , উল্লিখিত glob ফাংশন ত্রুটি-আউট হবে যদি ফলাফলের অন্যথায় খালি তালিকা হবে।

সেখানে বেশ কিছু গুরুত্বপূর্ণ সীমাবদ্ধতা এবং আদেশ সহকারে আছেন:

  1. যেহেতু glob() বিল্ড ফাইল মূল্যায়নের সময় রান glob() শুধুমাত্র আপনার সোর্স গাছ, কখনও উত্পন্ন ফাইল ফাইল সাথে মেলে। আপনি যদি একটি টার্গেট উভয় উৎস এবং উত্পন্ন ফাইল প্রয়োজন বিল্ডিং হয়, আপনি উল্লিখিত glob করার উত্পন্ন ফাইলের একটি সুনির্দিষ্ট তালিকা যোগ করতে হবে। দেখুন উদাহরণ দিয়ে নিচে :mylib : এবং :gen_java_srcs

  2. একটি নিয়ম একটি মিলেছে সোর্স ফাইল নামেই থাকে, তাহলে নিয়ম ফাইল "ছায়া" হবে।

    এটা বোঝার জন্য যে মনে glob() পাথ একটি তালিকা ফেরৎ, তাই ব্যবহার glob() অন্যান্য নিয়ম 'অ্যাট্রিবিউট (যেমন srcs = glob(["*.cc"]) ) স্পষ্টভাবে মিলেছে পাথ তালিকা হিসাবে একই প্রভাব রয়েছে । উদাহরণস্বরূপ, যদি glob() উৎপাদনের ["Foo.java", "bar/Baz.java"] কিন্তু সেখানে প্যাকেজ "Foo.java" নামক একটি নিয়ম আছে (যা অনুমোদিত হয়, যদিও Bazel এটি সম্পর্কে সতর্ক করে), তারপর ভোক্তা glob() "Foo.java" ফাইল পরিবর্তে "Foo.java" নিয়ম (তার আউটপুট) ব্যবহার করা হবে। দেখুন GitHub ইস্যু # 10395 আরো বিস্তারিত জানার জন্য।

  3. Globs সাবডিরেক্টরি ফাইল মেলে পারে। আর সাব নাম ওয়াইল্ডকার্ডযুক্ত করা যেতে পারে। যাহোক...
  4. লেবেলসমূহ প্যাকেজ সীমানা অতিক্রম করছে অনুমতি দেওয়া হয় না এবং উল্লিখিত glob subpackages ফাইল সাথে মিলছে না।

    উদাহরণস্বরূপ, উল্লিখিত glob এক্সপ্রেশনের **/*.cc প্যাকেজ x অন্তর্ভুক্ত নয় x/y/z.cc যদি x/y পর্যন্ত একটি প্যাকেজ (হয় হিসাবে হিসাবে বিদ্যমান x/y/BUILD , বা অন্য কোথাও প্যাকেজ-পথে )। এর অর্থ এই যে উল্লিখিত glob এক্সপ্রেশনের ফলে আসলে বিল্ড ফাইলের অস্তিত্ব উপর নির্ভর করে - যে, একই উল্লিখিত glob এক্সপ্রেশনের অন্তর্ভুক্ত করা হবে x/y/z.cc যদি কোন প্যাকেজ নামে পরিচিত ছিল x/y পর্যন্ত অথবা এটি হিসেবে ব্যবহার মোছা চিহ্নিত করা হয়েছিল --deleted_packages পতাকা।

  5. সীমাবদ্ধতা উপরে সব উল্লিখিত glob এক্সপ্রেশন ক্ষেত্রে প্রযোজ্য, সেটা ব্যাপার যা ওয়াইল্ডকার্ড তারা ব্যবহার।
  6. ফাইলের নাম দিয়ে শুরু সঙ্গে একটি লুকানো ফাইল . সম্পূর্ণরূপে উভয় দ্বারা মেলানো হয় ** এবং * ওয়াইল্ডকার্ড। আপনি যদি একটি যৌগ প্যাটার্ন সঙ্গে একটি গোপন ফাইল মেলে চান, আপনার প্যাটার্ন একটি দিয়ে শুরু করতে হবে . । উদাহরণস্বরূপ, * এবং .*.txt পাঠ্য ম্যাচ হবে .foo.txt কিন্তু *.txt না। লুকায়িত ডিরেক্টরি একইভাবে মেলানো হয়। লুকায়িত ডিরেক্টরি যে ইনপুট হিসাবে প্রয়োজন নেই ফাইল অন্তর্ভুক্ত হতে পারে, এবং অকারণে globbed ফাইল এবং মেমরি খরচ সংখ্যা বৃদ্ধি করতে পারেন। লুকানো ডিরেক্টরি অগ্রাহ্য করতে, তাদের "অগ্রাহ্য" তালিকা যুক্তি যোগ করুন।
  7. প্যাটার্ন: "**" ওয়াইল্ডকার্ড এক কোণে কেস আছে "**" প্যাকেজ এর ডিরেক্টরির পাথ সাথে মিলছে না। অর্থাৎ বলতে হয় glob(["**"], exclude_directories = 0) কঠোরভাবে বর্তমান প্যাকেজ এর ডিরেক্টরি অধীনে transitively সব ফাইল ও ডিরেক্টরিগুলি সাথে মিলে যায় (কিন্তু অবশ্যই subpackages ডিরেক্টরি মধ্যে না গিয়ে - যে সম্পর্কে পূর্ববর্তী নোট দেখুন)।

সাধারণভাবে, আপনি একটি উপযুক্ত এক্সটেনশন (যেমন * .html) এর পরিবর্তে একটি উল্লিখিত glob প্যাটার্ন জন্য একটি খালি '*' ব্যবহারের প্রদান চেষ্টা করা উচিত। অনেক বেশী সুনিদৃষ্ট নাম উভয় স্ব দলিল এবং নিশ্চিত করে যে আপনি দূর্ঘটনাক্রমে ব্যাকআপ ফাইল, অথবা Emacs মিলছে না / চ / ... ফাইল স্বয়ংক্রিয় সংরক্ষণ করা হয়।

আপনি উল্লিখিত glob উপাদান গনা করতে যখন বিল্ড নিয়ম লেখা। এই যে ইনপুট জন্য পৃথক নিয়ম উৎপাদিত উদাহরণস্বরূপ দেয়। দেখুন সম্প্রসারিত উল্লিখিত glob উদাহরণ বিভাগটি দেখুন।

উল্লিখিত glob উদাহরণ

এই ডিরেক্টরিতে সমস্ত Java ফাইল থেকে নির্মিত একটি জাভা লাইব্রেরি তৈরি করুন, এবং দ্বারা উত্পন্ন সব ফাইল :gen_java_srcs নিয়ম।

java_library(
    name = "mylib",
    srcs = glob(["*.java"]) + [":gen_java_srcs"],
    deps = "...",
)

genrule(
    name = "gen_java_srcs",
    outs = [
        "Foo.java",
        "Bar.java",
    ],
    ...
)

experimental.txt ব্যতীত ডিরেক্টরির testdata সমস্ত টেক্সট ফাইল অন্তর্ভুক্ত করুন। লক্ষ্য করুন testdata এর সাব ফাইল অন্তর্ভুক্ত করা হবে না। আপনি ঐ ফাইল অন্তর্ভুক্ত করতে চান, একটি recursive উল্লিখিত glob (**) ব্যবহার করুন।

sh_test(
    name = "mytest",
    srcs = ["mytest.sh"],
    data = glob(
        ["testdata/*.txt"],
        exclude = ["testdata/experimental.txt"],
    ),
)

Recursive উল্লিখিত glob উদাহরণ

পরীক্ষা testdata ডিরেক্টরির মধ্যে সব টেক্সট ফাইল এবং ডিরেক্টরির কোন ফাইলকে এভাবে উপর নির্ভর করে (এবং তাদের সাবডিরেক্টরি, ইত্যাদি) করুন। একটি বিল্ড ফাইল ধারণকারী সাবডিরেক্টরি উপেক্ষা করা হয়। (উপরে সীমাবদ্ধতা এবং আদেশ সহকারে দেখুন।)

sh_test(
    name = "mytest",
    srcs = ["mytest.sh"],
    data = glob(["testdata/**/*.txt"]),
)

একটি লাইব্রেরি যাদের পথ একটি নামের ডিরেক্টরি পরীক্ষামূলক অন্তর্ভুক্ত ব্যতীত এই ডিরেক্টরিতে সমস্ত Java ফাইল এবং সমস্ত সাব-থেকে নির্মিত তৈরি করুন। এই প্যাটার্ন যদি সম্ভব এড়িয়ে চলা উচিত, যেমন বিল্ড incrementality কমাতে এবং সেইজন্য বিল্ড বার বৃদ্ধি করতে পারেন।

java_library(
    name = "mylib",
    srcs = glob(
        ["**/*.java"],
        exclude = ["**/testing/**"],
    ),
)

সম্প্রসারিত উল্লিখিত glob উদাহরণ

বর্তমান যে ডিরেক্টরি ফাইলে লাইনের সংখ্যা, মোট ছাত্র মধ্যে * _test.cc জন্য একটি পৃথক genrule তৈরি করুন।

# Conveniently, the build language supports list comprehensions.
[genrule(
    name = "count_lines_" + f[:-3],  # strip ".cc"
    srcs = [f],
    outs = ["%s-linecount.txt" % f[:-3]],
    cmd = "wc -l $< >$@",
 ) for f in glob(["*_test.cc"])]

বিল্ড ফাইল উপরে প্যাকেজ // foo বিন্যাস এবং প্যাকেজ তিনটি ম্যাচিং ফাইল, a_test.cc, b_test.cc এবং c_test.cc তারপর চলমান থাকে তবে bazel query '//foo:all' সব নিয়ম যে উত্পন্ন হয় তালিকা প্রস্তুত করা হবে:

$ bazel query '//foo:all' | sort
//foo:count_lines_a_test
//foo:count_lines_b_test
//foo:count_lines_c_test

নির্বাচন করা

select(
    {conditionA: valuesA, conditionB: valuesB, ...},
    no_match_error = "custom message"
)

select() সাহায্যকারী ফাংশন যা একটি নিয়ম অ্যাট্রিবিউট করে তোলে কনফিগারযোগ্য । তাই এর মান কম্যান্ড-লাইন Bazel পতাকা উপর নির্ভর করে এটা প্রায় কোনো অ্যাট্রিবিউট নিয়োগ ডান পাশ প্রতিস্থাপন করতে পারেন। আপনি উদাহরণস্বরূপ এই ব্যবহার করতে পারেন, এম্বেড বিভিন্ন একটি রুল "ডেভেলপার" বনাম "মুক্তি" মোডে নির্মিত হয় কিনা তার উপর নির্ভর করে সম্পদ প্ল্যাটফর্ম-নির্দিষ্ট নির্ভরতা সংজ্ঞায়িত বা।

বেসিক ব্যবহার নিম্নরূপ:

sh_binary(
    name = "mytarget",
    srcs = select({
        ":conditionA": ["mytarget_a.sh"],
        ":conditionB": ["mytarget_b.sh"],
        "//conditions:default": ["mytarget_default.sh"]
    })
)

ফলে srcs একটি অ্যাট্রিবিউট sh_binary একটি সঙ্গে তার স্বাভাবিক লেবেল তালিকাটিতে নিয়োগ প্রতিস্থাপন দ্বারা কনফিগারযোগ্য select কল যে ম্যাচিং মান কনফিগারেশন অবস্থার মানচিত্র তৈরী করে। প্রতিটি শর্ত একটি একটি লেবেল রেফারেন্স config_setting বা constraint_value , যা "ম্যাচ" যদি লক্ষ্য কনফিগারেশন মূল্যবোধের একটি প্রত্যাশিত সেট সাথে মেলে। মান mytarget#srcs তখন হয়ে যেটা লেবেল তালিকাটিতে বর্তমান আবাহন সাথে মেলে।

মন্তব্য:

  • ঠিক এক শর্তে কোনো আবাহন নির্বাচিত করা হয়।
  • যদি একাধিক শর্ত মেলে এবং এক জন একটি বিশেষায়িত রূপ, বিশেষজ্ঞতা অগ্রগণ্যতা নেয়। অবস্থা বি শর্ত A -এর একটি বিশেষায়িত বিবেচিত যদি বি সব একই পতাকা এবং হিসেবে বাধ্যতা মান প্লাস কিছু অতিরিক্ত পতাকা বা বাধ্যতা মান রয়েছে। এটাও এর মানে হল যে বিশেষজ্ঞতা রেজল্যুশন একটি ক্রম তৈরি করতে ডিজাইন করা হয় না যেমন নীচের উদাহরণে 2 দেখিয়েছিলেন।
  • যদি একাধিক শর্ত মেলে এবং এক সব অন্যদের একটি বিশেষায়িত নয়, Bazel একটি ত্রুটির কথা ব্যর্থ।
  • বিশেষ সিউডো-ট্যাগ //conditions:default যদি অন্য কোন শর্ত ম্যাচ মেলে বিবেচনা করা হয়। এই অবস্থা থেকে বের করে ছেড়ে রাখলে, কিছু অন্যান্য নিয়ম একটি ত্রুটি এড়াতে মিলতে হবে।
  • select একটি বড় বৈশিষ্ট্য নিয়োগ ভিতরে এমবেড করা যেতে পারে। সুতরাং srcs = ["common.sh"] + select({ ":conditionA": ["myrule_a.sh"], ...}) এবং srcs = select({ ":conditionA": ["a.sh"]}) + select({ ":conditionB": ["b.sh"]}) বৈধ অভিব্যক্তি রয়েছে।
  • select সবচেয়ে কাজ, কিন্তু সব না, গুণাবলী। সঙ্গতিহীন বৈশিষ্ট্যাবলী চিহ্নিত করা হয়েছে nonconfigurable তাদের ডকুমেন্টেশনে।

    subpackages

    subpackages(include, exclude=[], allow_empty=True)

    subpackages() একটি সাহায্যকারী ফাংশন, অনুরূপ glob() যে তালিকা পরিবর্তে subpackages ফাইল ও ডিরেক্টরিগুলি। এটা তোলে হিসাবে একই পথ নিদর্শন ব্যবহার glob() এবং কোন সাবপ্যাকেজ বর্তমানে লোড বিল্ড ফাইলের সরাসরি বংশধর যে মেলাতে পারে। দেখুন উল্লিখিত glob এবং একটি বিস্তারিত ব্যাখ্যা জন্য অন্তর্ভুক্ত করা এবং বাদ প্যাটার্নের উদাহরণ।

    ফিরে subpackages ফলে তালিকা সাজানো অনুক্রম হল ও বর্তমান লোড প্যাকেজে আপেক্ষিক পাথ যে দেওয়া নিদর্শন মেলে include নয় এমন এবং exclude

    উদাহরণ

    নিম্নলিখিত উদাহরণে তালিকা সব প্যাকেজের জন্য সরাসরি subpackages foo/BUILD

    # The following BUILD files exist:
    # foo/BUILD
    # foo/bar/baz/BUILD
    # foo/sub/BUILD
    # foo/sub/deeper/BUILD
    #
    # In foo/BUILD a call to
    subs = subpackages(include = ["**"])
    
    # results in subs == ["sub", "bar/baz"]
    #
    # 'sub/deeper' is not included because it is a subpackage of 'foo/sub' not of
    # 'foo'
    

    সাধারণভাবে এটা যে পরিবর্তে এই ফাংশন সরাসরি যে ব্যবহারকারীদের 'subpackages' মডিউল ব্যবহার কলিং পছন্দ করা হয় skylib