کارکرد

ساخت وبلاگ

این تابع ابرداده ای را که برای هر قانون بعدی در بسته اعمال می شود، اعلام می کند. حداکثر یک بار در یک بسته (فایل BUILD) استفاده می شود.

تابع ()package باید درست بعد از تمام عبارات load() در بالای فایل، قبل از هر قانون فراخوانی شود.

استدلال ها

لیست برچسب ها؛اختیاری

قابلیت مشاهده پیش فرض قوانین در این بسته.

هر قانون در این بسته دارای قابلیت مشاهده مشخص شده در این ویژگی است، مگر اینکه در ویژگی مشاهده قانون مشخص شده باشد. برای اطلاعات دقیق در مورد نحو این ویژگی، به مستندات رویت مراجعه کنید. مشاهده پیش فرض بسته برای exports_files که به طور پیش فرض عمومی است، اعمال نمی شود.

پیام منسوخ شدن پیش فرض را برای همه قوانین موجود در این بسته تنظیم می کند.

لیست برچسب ها؛اختیاری

یک لیست پیش فرض از اهداف ابرداده را تنظیم می کند که برای همه اهداف دیگر در بسته اعمال می شود. اینها معمولاً اهداف مربوط به بسته OSS و اعلامیه های مجوز هستند. برای مثال قوانین_لیسانس را ببینید.

بولی؛اختیاری؛پیش فرض نادرست است به جز آنچه ذکر شد

ویژگی پیش فرض testonly را برای همه قوانین موجود در این بسته تنظیم می کند.

در بسته های تحت جاواتست مقدار پیش فرض 1 است.

لیست رشته ها؛اختیاری

پرچم های مختلفی را تنظیم می کند که بر معنایی این فایل BUILD تأثیر می گذارد.

این ویژگی عمدتاً توسط افرادی که در سیستم ساخت کار می کنند برای برچسب گذاری بسته هایی که نیاز به نوعی مدیریت خاص دارند استفاده می شود. از این استفاده نکنید مگر اینکه به صراحت توسط شخصی که روی سیستم ساخت کار می کند درخواست کرده باشد.

مثال ها

بیانیه زیر اعلام می کند که قوانین این بسته فقط برای اعضای گروه بسته قابل مشاهده است //foo:target . اعلان های دید فردی روی یک قانون، در صورت وجود، این مشخصات را نادیده می گیرند.

بسته (default_visibility = ["//foo:target"])

بسته_گروه

بسته_گروه (نام، بسته ها، شامل)

این تابع مجموعه ای از بسته ها را تعریف می کند و یک برچسب را با مجموعه مرتبط می کند. برچسب را می توان در ویژگی های دید ارجاع داد.

گروه های بسته در درجه اول برای کنترل دید استفاده می شوند. یک هدف قابل مشاهده برای عموم را می توان از هر بسته در درخت منبع ارجاع داد. یک هدف خصوصی قابل مشاهده فقط می تواند در بسته خود (نه بسته های فرعی) ارجاع داده شود. در بین این افراط ها، یک هدف ممکن است اجازه دسترسی به بسته خود به اضافه هر یک از بسته های توصیف شده توسط یک یا چند گروه بسته را بدهد. برای توضیح بیشتر در مورد سیستم دید، ویژگی visibility را ببینید.

در صورت مطابقت با ویژگی بسته ها ، یک بسته معین در گروه در نظر گرفته می شود ، یا در یکی دیگر از گروه های بسته بندی شده ذکر شده در این ویژگی موجود است.

گروه های بسته بندی از نظر فنی اهداف هستند ، اما طبق قوانین ایجاد نمی شوند و خودشان هیچ گونه محافظت از دید ندارند.

استدلال ها

یک نام منحصر به فرد برای این هدف.

لیست رشته ها ؛اختیاری

لیستی از مشخصات بسته صفر یا بیشتر.

هر رشته مشخصات بسته می تواند یکی از فرم های زیر را داشته باشد:

  1. نام کامل یک بسته ، بدون مخزن آن ، با یک برش مضاعف شروع می شود. به عنوان مثال ، // foo/bar بسته ای را با آن نام مشخص می کند و در همان مخزن به عنوان گروه بسته زندگی می کند.
  2. همانطور که در بالا ، اما با یک دنباله دار /. بشربه عنوان مثال ، // foo/. مجموعه ای از // foo و تمام زیر بسته های آن را مشخص می کند.//تمام بسته های موجود در مخزن فعلی را مشخص می کند.
  3. رشته ها عمومی یا خصوصی ، که به ترتیب هر بسته یا بسته ای را مشخص می کنند..

مثال ها

اعلامیه package_group زیر یک گروه بسته به نام "گرمسیری" را مشخص می کند که حاوی میوه های گرمسیری است.

بسته_گروپ (name = "گرمسیری" ، بسته ها = ["// میوه ها/انبه" ، "// میوه ها/نارنجی" ، "// میوه ها/پاپایا/." ،] ،)

اعلامیه های زیر گروه های بسته یک برنامه داستانی را مشخص می کنند:

pack_group (name = "fooapp" ، شامل = [": controller" ، ": model" ، ": view" ،] ،) pack_group (name = "model" ، packages = ["// fooapp/database"] ،)pack_group (name = "view" ، packages = ["// fooapp/swingui" ، "// fooapp/webui" ،] ،) pack_group (name = "کنترل کننده" ، بسته ها = ["// fooapp/الگوریتم"] ،)

صادرات_

Exports_files ([برچسب ،.] ، دید ، مجوزها)

Exports_files () لیستی از پرونده های متعلق به این بسته را که به سایر بسته ها صادر می شود ، مشخص می کند. فایل ساخت برای یک بسته فقط در صورت صریح با بیانیه Exports_Files () ممکن است مستقیماً به پرونده های منبع متعلق به بسته دیگری مراجعه کند. اطلاعات بیشتر در مورد دید پرونده ها را بخوانید. به عنوان یک رفتار میراث ، همچنین پرونده هایی که به عنوان ورودی به یک قاعده ذکر شده اند با دید پیش فرض صادر می شوند تا پرچ م-Incompative_no_Implicit_File_Export. با این حال ، این رفتار نباید به آن اعتماد کرد و به طور فعال از آن جدا شد.

استدلال ها

آرگومان لیستی از نام پرونده ها در بسته فعلی است. اعلامیه دید نیز می تواند مشخص شود. در این حالت ، پرونده ها برای اهداف مشخص شده قابل مشاهده خواهند بود. اگر هیچ دید مشخص نشده باشد ، پرونده ها برای هر بسته قابل مشاهده خواهند بود ، حتی اگر دید پیش فرض بسته در عملکرد بسته مشخص شده باشد. مجوزها نیز می توانند مشخص شوند.

مثال

مثال زیر صادر می کند Golden. txt ، یک فایل متنی از بسته test_data ، به طوری که بسته های دیگر ممکن است از آن استفاده کنند ، به عنوان مثال ، در ویژگی داده تست ها.

# از // test_data/ساخت Exports_files (["Golden. txt"])

کره

GLOB (شامل ، حذف = [] ، udeude_directories = 1 ، Allow_empty = true)
  • foo/bar. txt دقیقاً با پرونده foo/bar. txt در این بسته مطابقت دارد
  • Foo/*. txt در صورت پایان پرونده با . txt با هر پرونده در FOO/ Directory مطابقت دارد (مگر اینکه Foo/ یک زیرمجموعه باشد)
  • foo/ a* . htm* با هر پرونده در FOO/ دایرکتوری که با A شروع می شود مطابقت دارد ، سپس یک رشته دلخواه (می تواند خالی باشد) ، سپس دارای . htm است و با یک رشته دلخواه دیگر به پایان می رسد. مانند foo/axx. htm و foo/a. html یا foo/axxx. html
  • **/a. txt با هر پرونده a. txt در هر زیر مجموعه این بسته مطابقت دارد
  • **/bar/**/*. txt با هر پرونده . txt در هر زیر مجموعه این بسته مطابقت دارد ، اگر حداقل یک دایرکتوری در مسیر حاصل نوار نامیده شود ، مانند 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 () فقط در درخت منبع شما مطابقت دارد ، هرگز پرونده هایی را تولید نکرده است. اگر در حال ساختن هدفی هستید که به پرونده های منبع و تولید شده نیاز داشته باشد ، باید لیستی صریح از پرونده های تولید شده را به کره زمین اضافه کنید. مثال زیر را با: mylib و: gen_java_srcs مشاهده کنید.
  2. اگر یک قانون به همان نام یک پرونده منبع همسان داشته باشد ، این قانون پرونده را "سایه" می کند. برای درک این موضوع ، به یاد داشته باشید که Glob () لیستی از مسیرها را برمی گرداند ، بنابراین استفاده از Glob () در ویژگی سایر قوانین (به عنوان مثال SRCS = GLOB (["*. CC"]) همان تأثیر را دارد که لیست مسیرهای همسان را صریحاً لیست می کندبشراگر به عنوان مثال Glob () ["foo. java" ، "bar/baz. java"] را بازده دهد ، اما یک قانون در بسته ای به نام "foo. java" نیز وجود دارد (که مجاز است ، هرچند که بازار در مورد آن هشدار می دهد) ، پسمصرف کننده کره () به جای پرونده "foo. java" از قانون "foo. java" (خروجی های آن) استفاده می کند. برای اطلاعات بیشتر به شماره GitHub #10395 مراجعه کنید.
  3. گلوب ها ممکن است پرونده ها را در زیر مجموعه ها مطابقت دهند. و نامهای زیر مجموعه ممکن است کارت وحشی باشد. با این حال.
  4. برچسب ها مجاز به عبور از مرز بسته نیستند و گلوب با پرونده ها در زیر مجموعه ها مطابقت ندارد. به عنوان مثال ، Glob Expression **/*. CC در بسته X شامل x/y/z. cc در صورت وجود x/y به عنوان یک بسته (یا به صورت x/y/ساخت ، یا جایی دیگر در مسیر بسته بندی است.). این بدان معناست که نتیجه بیان گلوب در واقع به وجود پرونده های ساخت بستگی دارد - یعنی همان بیان کره شامل x/y/z. cc در صورت عدم وجود بسته ای به نام x/y یا با استفاده از حذف شده است. پرچ م-حذف شده_ بسته بندی شده.
  5. محدودیت فوق در مورد همه عبارات جهان اعمال می شود ، مهم نیست که از کدام کارتهای وحشی استفاده می کنند.
  6. یک پرونده پنهان با نام پرونده شروع می شود. کاملاً با هر دو کارت ** و * * *اگر می خواهید یک فایل پنهان را با یک الگوی مرکب مطابقت دهید ، الگوی شما باید با یک شروع شود. بشربه عنوان مثال ، *و. *. txt مطابقت خواهد داشت . foo. txt ، اما *. txt چنین نخواهد شد. دایرکتوری های پنهان نیز به همان شیوه مطابقت دارند. دایرکتوری های پنهان ممکن است شامل پرونده هایی باشند که به عنوان ورودی مورد نیاز نیستند و می توانند تعداد پرونده های غیر ضروری گلوب و مصرف حافظه را افزایش دهند. برای حذف دایرکتوری های پنهان ، آنها را به استدلال لیست "حذف" اضافه کنید.
  7. Wildcard "**" دارای یک مورد گوشه ای است: الگوی "**" با مسیر فهرست بسته بندی مطابقت ندارد. به این معنی که ، گلوب (["**"] ، udude_directories = 0) با تمام پرونده ها و دایرکتوری ها به طور دقیق تحت فهرست بسته فعلی مطابقت دارد (اما البته به دایرکتوری های زیرپایی ها نمی روید - یادداشت قبلی را در مورد آن ببینید).

به طور کلی ، شما باید به جای استفاده از یک لخت * * *برای یک الگوی کره ، یک پسوند مناسب (به عنوان مثال *. html) تهیه کنید. نام صریح تر هم خود مستند سازی است و هم تضمین می کند که شما به طور تصادفی با فایلهای پشتیبان مطابقت نداشته باشید ، یا EMACS/VI/. پرونده های ذخیره خودکار.

هنگام نوشتن قوانین می توانید عناصر کره را ذکر کنید. به عنوان مثال ، این امر باعث ایجاد قوانین فردی برای هر ورودی می شود. بخش نمونه Glob را در زیر مشاهده کنید.

نمونه های جهان

یک کتابخانه جاوا ایجاد کنید که از تمام پرونده های جاوا در این فهرست ساخته شده است ، و کلیه پرونده های تولید شده توسط قانون: gen_java_srcs.

java_library (name = "mylib" ، srcs = glob (["*. java"]) + [": gen_java_srcs"] ، deps = "." ،) ژنرول (name = "gen_java_srcs" ، outs = ["foo. javaaa"،" bar. java "،] ،.)

تمام پرونده های TXT را در Directory TestData به جز Experimental. txt وارد کنید. توجه داشته باشید که پرونده ها در زیر مجموعه های TestData گنجانده نمی شوند. اگر می خواهید این پرونده ها گنجانده شود ، از یک کره بازگشتی (**) استفاده کنید.

sh_test (name = "mytest" ، srcs = ["mytest. sh"] ، data = glob (["testdata/*. txt"] ، حذف = ["testData/Experimental. txt"] ،) ،)

نمونه های بازگشتی کره

تست را به تمام پرونده های TXT در فهرست TestData و هر یک از زیر مجموعه های آن (و زیر مجموعه های آنها و غیره) بستگی دارد. زیر مجموعه های حاوی یک پرونده ساخت نادیده گرفته می شوند.(به محدودیت ها و احتیاط های بالا مراجعه کنید.)

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

یک کتابخانه ایجاد کنید که از تمام پرونده های جاوا در این فهرست ساخته شده است و کلیه زیر مجموعه ها به جز مواردی که مسیر آنها شامل یک دایرکتوری به نام تست است. در صورت امکان باید از این الگوی جلوگیری شود ، زیرا می تواند باعث افزایش ساخت و ساز شود و بنابراین زمان ساخت را افزایش می دهد.

java_library (name = "mylib" ، srcs = glob (["**/*. java"] ، حذف = ["**/تست/**"] ،) ،)

نمونه های جهانی گسترش یافته

یک ژنرول جداگانه برای *_test. cc در دایرکتوری فعلی ایجاد کنید که تعداد خطوط موجود در پرونده را حساب می کند.

# به راحتی ، زبان ساخت از لیست درک مطلب پشتیبانی می کند.[genrule (name = "count_lines_" + f [:-3] ، # strip ". cc" srcs = [f] ، outs = ["٪ s-linecount. txt" ٪ f [:-3]] ، cmd ="w c-l $<>$@"،) برای f در جهان (["*_ test. cc "])]

اگر پرونده ساخت فوق در بسته // foo باشد و بسته شامل سه پرونده مطابق ، a_test. cc ، b_test. cc و c_test. cc است و سپس Bazel Query '// foo: All' تمام قوانینی را که تولید شده است لیست می کند:

$ query $ '// foo: all' |مرتب سازی // foo: count_lines_a_test // foo: count_lines_b_test // foo: count_lines_c_test

انتخاب کنید

انتخاب کنید (، no_match_error = "پیام سفارشی")

select() تابع کمکی است که یک ویژگی قانون را قابل تنظیم می کند. این می تواند تقریباً هر انتساب ویژگی را جایگزین سمت راست کند، بنابراین ارزش آن به پرچم های خط فرمان Bazel بستگی دارد. می توانید از این، برای مثال، برای تعریف وابستگی های خاص پلتفرم یا جاسازی منابع مختلف بسته به اینکه یک قانون در حالت «توسعه دهنده» در مقابل «رهاسازی» ساخته شده است استفاده کنید.

استفاده اساسی به شرح زیر است:

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

این ویژگی srcs یک sh_binary را با جایگزین کردن تخصیص لیست برچسب معمولی آن با یک فراخوان انتخابی که شرایط پیکربندی را با مقادیر منطبق ترسیم می کند، قابل تنظیم می کند. هر شرط یک مرجع برچسب به config_setting یا constraint_value است، که اگر پیکربندی هدف با مجموعه مقادیر مورد انتظار مطابقت داشته باشد، "تطابق دارد". سپس مقدار mytarget#srcs به فهرست برچسب هایی تبدیل می شود که با فراخوان فعلی مطابقت داشته باشد.

 

  • در هر فراخوانی دقیقاً یک شرط انتخاب می شود.
  • اگر چند شرط مطابقت داشته باشد و یکی از آن ها تخصص دیگری باشد، تخصص اولویت دارد. شرط B به عنوان یک تخصص شرط A در نظر گرفته می شود اگر B همه پرچم ها و مقادیر محدودیت مشابه با A به اضافه برخی پرچم ها یا مقادیر محدودیت اضافی داشته باشد. این همچنین به این معنی است که وضوح تخصصی برای ایجاد یک سفارش طراحی نشده است که در مثال 2 در زیر نشان داده شده است.
  • اگر چند شرط با هم مطابقت داشته باشند و یکی از آن ها تخصصی نباشد، Bazel با یک خطا شکست می خورد، مگر اینکه همه شرایط به یک مقدار برسند.
  • اگر هیچ شرط دیگری مطابقت نداشته باشد، برچسب شبه ویژه //conditions:default مطابقت دارد. اگر این شرط کنار گذاشته شود، قوانین دیگری باید مطابقت داشته باشند تا از خطا جلوگیری شود.
  • select را می توان در یک تخصیص ویژگی بزرگتر جاسازی کرد. بنابراین srcs = ["common. sh"] + select(<":conditionA": ["myrule_a.sh"], .>) و srcs = انتخاب کنید(<":conditionA": ["a.sh"]>) + انتخاب (<":conditionB": ["b.sh"]>) عبارات معتبری هستند.
  • انتخاب کنید با اکثر ویژگی ها، اما نه همه، کار می کند. ویژگی های ناسازگار در مستندات خود غیرقابل تنظیم علامت گذاری می شوند.

     

بسته های فرعی

بسته های فرعی (شامل، حذف=[]، allow_empty=True)

لیست حاصل از بسته های فرعی بازگشتی به ترتیب مرتب شده است و شامل مسیرهایی نسبت به بسته بارگیری فعلی است که با الگوهای داده شده در شامل و نه با موارد استثنا مطابقت دارد.

مثال

مثال زیر تمام زیر بسته های مستقیم بسته foo/BUILD را فهرست می کند

# پرونده های ساخت زیر وجود دارد: # foo/build # foo/bar/baz/build # foo/sub/build # foo/sub/deeper/build # # در foo/ساخت یک تماس به زیر مجموعه = زیر بسته ها (شامل = ["** "]) # نتیجه در زیر == [" sub "،" bar/baz "] # #" sub/deeper "گنجانده نشده است زیرا این یک زیر مجموعه از" foo/sub "از #" foo "است

به طور کلی ترجیح داده می شود که به جای تماس مستقیم با این عملکرد ، کاربران از ماژول "Subpackages" Skylib استفاده کنند.

به جز آنچه در غیر این صورت ذکر شد ، محتوای این صفحه تحت مجوز Creative Commons Attribution 4. 0 مجوز دارد و نمونه های کد تحت مجوز Apache 2. 0 مجوز دارند. برای جزئیات بیشتر ، به سیاست های سایت Google Developers مراجعه کنید. جاوا یک علامت تجاری ثبت شده اوراکل و/یا شرکت های وابسته به آن است.

آخرین به روز شده 2023-04-15 UTC.< Pan> # پرونده های ساخت زیر وجود دارد: # foo/build # foo/bar/baz/build # foo/sub/build # foo/sub/deeper/build # # در foo/ساخت یک تماس برای زیر مجموعه ها (شامل)= ["**"]) # نتیجه در زیر == ["Sub" ، "Bar/Baz"] # # "Sub/Deeper" گنجانده نشده است زیرا این زیر مجموعه ای از "FOO/SUB" است نه از # "foo '

استراتژی های مؤثر فارکس...
ما را در سایت استراتژی های مؤثر فارکس دنبال می کنید

برچسب : نویسنده : توران میرهادی بازدید : <-PostHit-> تاريخ : جمعه 30 تير 1402 ساعت: 10:59