سيتم إطلاق BazelCon لعام 2022 في الفترة من 16 إلى 17 تشرين الثاني (نوفمبر) في نيويورك وعلى الإنترنت. التسجيل اليوم
جديد: انضم إلينا في يوم المنتدى في 15 تشرين الثاني (نوفمبر). التفاصيل والتسجيل:

التعريفات الشائعة

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

يحدّد هذا القسم العبارات والمفاهيم المختلفة التي تكون شائعة في العديد من الدوال أو القواعد.

المحتويات

إنشاء رمز مميز لـBurne Shell

يتم تقسيم سمات سلسلة معيّنة من بعض القواعد إلى كلمات متعددة وفقًا لقواعد إنشاء الرموز المميّزة لصدفة Bourne: تحدّد المسافات غير المُحاطة بعلامات اقتباس كلمات منفصلة، ويتم استخدام علامات الاقتباس المزدوجة والشرطتَين الأوليتَين بشرطات مائلة لمنع الترميز.

ويُشار صراحةً إلى هذه السمات التي تخضع لهذا الترميز في تعريفاتها في هذا المستند.

وعادةً ما تُستخدَم السمات التي تخضع لـ "Make;quot;التوسيع المتغير والمتغيّر الذي يُطبقه رمز الإجراء وBourne Shell لتمرير الخيارات العشوائية إلى برامج التجميع وأدوات أخرى. ومن أمثلة هذه السمات cc_library.copts وjava_library.javacopts. وتسمح هذه الاستبدالات بتوسيع متغيّر سلسلة واحدة إلى قائمة ضبط خاصة بكلمات الخيارات.

توسيع التصنيف

تخضع بعض سمات السلسلة لقواعد قليلة جدًا لتوسيع نطاق التصنيف: إذا كانت هذه السلاسل تحتوي على تصنيف صالح كسلسلة فرعية، مثل //mypkg:target، وكان ذلك التصنيف متطلبًا أساسيًا مُعلَنًا للقاعدة الحالية، سيتم توسيعه إلى اسم المسار الخاص بالملف الذي يمثله target //mypkg:target.

وتشمل الأمثلة على السمات genrule.cmd وcc_binary.linkopts. وقد تختلف التفاصيل بشكل كبير في كل حالة، على النحو التالي:

السمات النموذجية التي تحدّدها معظم قواعد الإصدار

يوضّح هذا القسم السمات المحدّدة في العديد من قواعد الإصدار، ولكن ليس كلها.

السمة الوصف
data

List of labels ; optional

الملفات التي تحتاج إليها هذه القاعدة في وقت التشغيل. قد يعرض الملف قائمة بأهداف القاعدة. بشكل عام يسمح بأي هدف.

يجب أن تظهر المُخرجات وملفات التشغيل التلقائية للأهداف في السمة data في المنطقة *.runfiles لأي ملف تنفيذي يتم إخراجه بناءً على هذا الاستهداف أو يعتمد عليه وقت التشغيل. وقد يتضمّن ذلك ملفات البيانات أو البرامج الثنائية المستخدَمة عند تنفيذ هذا الاستهدافsrcs. انتقِل إلى قسم اعتماديات البيانات للحصول على مزيد من المعلومات حول كيفية الاعتماد على ملفات البيانات واستخدامها.

يجب أن تحدد القواعد الجديدة السمة data إذا كانت تعالج الإدخالات التي قد تستخدم مدخلات أخرى في وقت التشغيل. يجب أيضًا أن تملأ دوال القواعد 39 وعمليات التنفيذ قيد التشغيل:

deps

List of labels ; optional

المهام التابعة لهذا الهدف. بوجهٍ عام، يجب إدراج استهدافات القواعد فقط. (على الرغم من أنّ بعض القواعد تسمح بإدراج الملفات مباشرةً في deps، يجب تجنّب ذلك متى أمكن.)

بشكل عام، تقتصر القواعد المحدّدة للغة على الاستهدافات التي تتضمّن مقدّمي خدمات معيّنين.

ترتبط الدلالات الدقيقة لما يعنيه الاستهداف في الاعتماد على آخر باستخدام deps لنوع القاعدة، وتتناول المستندات الخاصة بالقاعدة مزيدًا من التفاصيل. بالنسبة إلى القواعد التي تعالج رمز المصدر، يحدّد deps عمومًا تبعيات الرمز التي يستخدمها الرمز في srcs.

وفي كثير من الأحيان، يتم استخدام اعتمادية deps للسماح لوحدة باستخدام الرموز المحددة في وحدة أخرى مكتوبة بلغة البرمجة نفسها ويتم تجميعها بشكل منفصل. يُسمح أيضًا بالاعتماديات بلغات متعددة في العديد من الحالات: على سبيل المثال، قد يعتمد الاستهداف java_library على رمز C++ في الاستهداف cc_library، من خلال إدراج الثاني في السمة deps. يمكنك الاطّلاع على تعريف الاعتماديات للحصول على مزيد من المعلومات.

licenses

List of strings; optional; nonconfigurable

قائمة بسلاسل نوع الترخيص المطلوب استخدامها لهذا الهدف تحديدًا. هذا جزء من واجهة برمجة تطبيقات الترخيص التي تم إيقافها نهائيًا والتي لم تعد Bazel تستخدمها. لا تستخدمها.

srcs

List of labels ; optional

الملفات التي تمّت معالجتها أو تضمينها من خلال هذه القاعدة. بشكل عام، يعرض الملف الملفات مباشرةً، ولكن قد يدرج أهداف قاعدة (مثل filegroup أو genrule) لتضمين النتائج التلقائية.

وغالبًا ما تتطلب القواعد الخاصة باللغة أن تكون الملفات المُدرَجة تتضمن امتدادات ملفات معينة.

السمات المشتركة بين جميع قواعد الإصدار

يوضّح هذا القسم السمات التي تُضاف ضمنيًا إلى جميع قواعد التصميم.

السمة الوصف
compatible_with

List of labels ; optional; nonconfigurable

قائمة البيئات التي يمكن إنشاء هذا الهدف إليها، بالإضافة إلى البيئات المتوافقة بشكل تلقائي.

هذا جزء من نظام Bazel's، والذي يسمح للمستخدمين بتحديد الأهداف التي يمكن وتلك التي لا يمكنها الاعتماد على بعضها البعض. على سبيل المثال، يجب ألا تعتمد البرامج الثنائية القابلة للنشر خارجيًا على المكتبات ذات الرموز السرية للشركة. يمكنك الاطّلاع على ConstraintSemantics للحصول على التفاصيل.

deprecation

String; optional; nonconfigurable

رسالة تحذيرية تفسيرية مرتبطة بهذا الهدف. ويُستخدم هذا عادةً لإشعار المستخدمين بأن هدفًا ما أصبح قديمًا، أو تم استبداله بقاعدة أخرى، أو كان خاصًا بحزمة، أو قد يتم اعتباره ضارًا لسبب ما. ومن المفيد تضمين بعض المراجع (مثل صفحة ويب أو رقم خطأ أو مثال على أخطاء نقل البيانات) بحيث يمكن للمستخدم بسهولة معرفة التغييرات المطلوبة لتجنب الرسالة. إذا كان هناك هدف جديد يمكن استخدامه كانخفاض في الاستبدال، من الأفضل نقل جميع مستخدمي الاستهداف القديم فقط.

ليس لهذه السمة أي تأثير على طريقة إنشاء العناصر، ولكنها قد تؤثر في نتائج تشخيص أداة الإنشاء. وتُصدر أداة الإصدار تحذيرًا عندما تعتمد قاعدة ذات سمة deprecation على هدف في حزمة أخرى.

ويتم إعفاء الأجهزة التابعة داخل الحزمة من هذا التحذير، بحيث لا يؤدي مثلاً إنشاء اختبارات قاعدة متوقف العمل فيها إلى ظهور تحذير.

إذا كان الاستهداف الذي يتم إيقافه يعتمد على هدف آخر تم إيقاف العمل به، لن يتم إصدار أي رسالة تحذير.

وبعد أن يتوقف المستخدمون عن استخدامه، يمكن إزالة الهدف.

distribs

List of strings; optional; nonconfigurable

قائمة بسلاسل طريقة التوزيع المراد استخدامها لهذا الاستهداف تحديدًا. هذا جزء من واجهة برمجة تطبيقات الترخيص التي تم إيقافها نهائيًا والتي لم تعد Bazel تستخدمها. لا تستخدمها.

exec_compatible_with

List of labels ; optional; nonconfigurable

قائمة constraint_values التي يجب أن تكون موجودة في منصة التنفيذ لهذا الهدف. وهذا إضافة إلى أي قيود تم ضبطها بواسطة نوع القاعدة. يتم استخدام القيود لتقييد قائمة منصات التنفيذ المتاحة. للحصول على مزيد من التفاصيل، يُرجى الاطّلاع على وصف دقة سلسلة الأدوات.

exec_properties

Dictionary of strings; optional

قاموس السلاسل التي ستتم إضافتها إلى السمة exec_properties للنظام الأساسي المحدَّد لهذا الهدف. يمكنك الاطّلاع على exec_properties من قاعدة النظام الأساسي.

وفي حال توفّر مفتاح في الموقع الإلكتروني على مستوى المنصة والهدف، سيتم أخذ القيمة من الهدف.

features

List of feature strings; optional

الميزة هي علامة سلسلة يمكن تفعيلها أو إيقافها على الهدف. يعتمد معنى الميزة على القاعدة نفسها.

يتم دمج هذه السمة features مع سمة المستوى featuresالحزمة. على سبيل المثال، إذا تم تفعيل الميزات ["a", "b"] على مستوى الحزمة كما تحتوي السمة target's features على ["-a","c"] ستكون الميزات التي تم تفعيلها للقاعدة هي "b" &&;;". يُرجى الاطّلاع على المثال.

restricted_to

List of labels ; optional; nonconfigurable

قائمة البيئات التي يمكن إنشاء هذا الهدف لها، بدلاً من البيئات المتوافقة تلقائيًا.

هذا جزء من نظام Bazel's للقيود. يمكنك الاطّلاع على compatible_with للحصول على التفاصيل.

tags

List of strings; optional; nonconfigurable

يمكن استخدام العلامات في أي قاعدة. تُعد العلامات في الاختبار وقواعد test_suite مفيدة لتصنيف الاختبارات. يتم استخدام العلامات في الاستهدافات غير التجريبية للتحكّم في تنفيذ genrules و Starlark في وضع الحماية، وتحليلها بواسطة أشخاص و/أو أدوات خارجية.

يعدّل Bazel سلوك رمز وضع الحماية إذا عثر على الكلمات الرئيسية التالية في السمة tags في أي اختبار أو استهداف genrule، أو مفاتيح execution_requirements لأي إجراء Starlark.

  • يؤدي استخدام كلمة رئيسية واحدة (no-sandbox) إلى تنفيذ الإجراء أو الاختبار مطلقًا، حيث لا يزال من الممكن تخزينه مؤقتًا أو تشغيله عن بُعد. استخدِم no-cache أو no-remote لمنع أيًا منهما أو كليهما.
  • تؤدي no-cache كلمة رئيسية إلى عدم تنفيذ الإجراء أو الاختبار مطلقًا مؤقتًا (عن بُعد أو محليًا)
  • no-remote-cache يؤدي استخدام الكلمة الرئيسية أو الاختبار إلى عدم تخزينها مؤقتًا عن بُعد (ولكن قد يتم تخزينها مؤقتًا محليًا، وقد يتم تنفيذها عن بُعد أيضًا). ملاحظة: لأغراض هذه العلامة، تُعدّ ذاكرة التخزين المؤقت على القرص ذاكرة تخزين مؤقت محلية، بينما تُعتبر ذاكرة التخزين المؤقت http وgRPC ذاكرة تخزين عن بُعد. في حال تحديد ذاكرة تخزين مؤقت مجمّعة (أي ذاكرة تخزين مؤقت تتضمن مكوّنات محلية وبعيدة)، يتم التعامل معها على أنّها ذاكرة تخزين مؤقت بعيدة ويتم إيقافها تمامًا ما لم يتم ضبط السياسة --incompatible_remote_results_ignore_disk، وفي هذه الحالة سيتم استخدام المكوّنات المحلية.
  • تؤدي no-remote-exec كلمة رئيسية إلى عدم تنفيذ الإجراء أو الاختبار مطلقًا عن بُعد (ولكن قد يتم تخزينه مؤقتًا عن بُعد).
  • تمنع كلمة رئيسية واحدة (no-remote) تنفيذ الإجراء أو الاختبار عن بُعد أو تخزينه مؤقتًا عن بُعد. هذا يعادل استخدام no-remote-cache وno-remote-exec على حد سواء.
  • تؤدي الكلمة الرئيسية no-remote-cache-upload إلى إيقاف تحميل جزء من التخزين المؤقت عن بُعد. لا يؤدي إلى إيقاف التنفيذ عن بُعد.
  • تمنع الكلمة الرئيسية local الإجراء أو الاختبار من التخزين المؤقت عن بُعد أو التنفيذ عن بُعد أو التشغيل داخل وضع الحماية. وبالنسبة إلى القواعد الجينية والاختبارات، يكون لوضع علامة local = True على السمة التأثير نفسه.
  • تتيح كلمة requires-network الرئيسية الوصول إلى الشبكة الخارجية من داخل وضع الحماية. ولا تؤثر هذه العلامة إلا في حال تفعيل وضع الحماية.
  • تعمل الكلمة الرئيسية block-network على حظر الوصول إلى الشبكة الخارجية من داخل وضع الحماية. وفي هذه الحالة، يُسمح بالتواصل مع المضيف المحلي فقط. ولا تؤثر هذه العلامة إلا في حال تفعيل وضع الحماية.
  • يشغِّل requires-fakeroot الاختبار أو الإجراء باعتباره uid وgid 0 (أي المستخدم الجذر). لا تتوفّر هذه الميزة إلا على نظام التشغيل Linux. تحظى هذه العلامة بالأولوية على خيار سطر الأوامر --sandbox_fake_username.

بشكلٍ عام، تُستخدَم العلامات في الاختبارات لإضافة تعليقات توضيحية إلى دور الاختبار في عملية تصحيح الأخطاء وعملية الإصدار. في العادة، تُعدّ العلامات مفيدة بشكلٍ كبير في اختبارات C++ وPython، التي تفتقر إلى أي إمكانات للتعليقات التوضيحية في وقت التشغيل. ويوفر استخدام العلامات وعناصر الحجم المرونة في تجميع مجموعات الاختبارات استنادًا إلى سياسة تسجيل الوصول إلى الرمز الأساسي.

يعدّل Bazel سلوك الاختبار عند العثور على الكلمات الرئيسية التالية في السمة tags لقاعدة الاختبار:

  • سيفرض exclusive إجراء الاختبار في الوضع " الحصرية"، لضمان عدم إجراء أيّ اختبارات أخرى في الوقت نفسه. سيتم تنفيذ هذه الاختبارات بطريقة تسلسلية بعد إكمال كل نشاط الإصدار والاختبارات غير الحصرية. تم إيقاف التنفيذ عن بُعد لهذه الاختبارات لأن Bazel لا يتحكم في ما يتم تشغيله على جهاز بعيد.
  • سيفرض exclusive-if-local إجراء الاختبار في وضع " الحصرية"، إذا تم تنفيذه محليًا، ولكن سيتم إجراء الاختبار في الوقت نفسه إذا تم تنفيذه عن بُعد.
  • ستستبعد الكلمة الرئيسية manual الاستهداف من توسيع أحرف البدل الخاصة بالنمط المستهدَف (... و:* و:all وما إلى ذلك) وقواعد test_suite التي لا تُدرج الاختبار صراحةً عند احتساب مجموعة الاستهدافات ذات المستوى الأعلى لإنشاء/تنفيذ أوامر build وtest وcoverage. ولا يؤثّر ذلك في توسيع نطاق حرف البدل المستهدف أو اختبار توسيع حزمة الحزمة في سياقات أخرى، بما في ذلك الأمر query. تجدر الإشارة إلى أنّ manual لا يعني ضمنًا أنه يجب عدم إنشاء/هدف الاستهداف تلقائيًا من خلال أنظمة إصدار/اختبار مستمر. على سبيل المثال، قد يكون من المستحسن استبعاد هدف من bazel test ... لأنه يتطلب علامات Bazel محدّدة، ولكن لا يزال يتم تضمينه في عمليات الإرسال المسبق التي تم ضبطها بشكلٍ سليم أو تشغيل الاختبارات المستمرة.
  • ستفرض كلمة رئيسية واحدة (external) اختبارًا غير مشروط (بغض النظر عن قيمة --cache_test_results).
راجِع اصطلاحات العلامة في الموسوعة التجريبية للاطّلاع على مزيد من اصطلاحات بشأن العلامات المرتبطة بأهداف الاختبار.
target_compatible_with

List of labels ; optional

قائمة constraint_values التي يجب أن تكون موجودة في النظام الأساسي المستهدف لكي يتم اعتبارها متوافقة. وهذا بالإضافة إلى أي قيود سبق ضبطها بواسطة نوع القاعدة. وإذا لم يستوفِ النظام الأساسي المستهدف جميع القيود المدرجة، حينئذٍ يُعدّ الهدف غير متوافق. ويتم تخطّي الاستهدافات غير المتوافقة للإنشاء والاختبار عند توسيع نمط الاستهداف (مثل //... أو :all). وعند تحديدها صراحةً في سطر الأوامر، تؤدي الأهداف غير المتوافقة إلى أن يطبع Bazel خطأ ويتسبب في حدوث خطأ في الإصدار أو الاختبار.

الاستهدافات التي تعتمد على الاستهدافات غير المتوافقة بشكل مؤقت هي غير متوافقة مع هذه الأهداف. ويتم أيضًا تخطيها للإنشاء والاختبار.

وتشير القائمة الفارغة (التلقائية) إلى أنّ الهدف متوافق مع جميع المنصّات.

تتوافق جميع القواعد بخلاف قواعد Workspace مع هذه السمة. بالنسبة إلى بعض القواعد، ليس لهذه السمة أي تأثير. على سبيل المثال، لن يكون من المفيد تحديد target_compatible_with في cc_toolchain.

راجِع صفحة المنصات للحصول على المزيد من المعلومات حول التخطّي المستهدف غير المتوافق.

testonly

Boolean; optional; default False except for test and test suite targets; nonconfigurable

إذا كانت القيمة "صحيح"، لا يمكن الاعتماد سوى على الاستهدافات التجريبية فقط (مثل الاختبارات) على هذا الاستهداف.

وبالمثل، لا يُسمح للقاعدة التي لا تكون testonly بالاعتماد على أي قاعدة هي testonly.

الاختبارات (قواعد *_test) ومجموعات الاختبار (قواعد test_suite) تكون testonly تلقائيًا.

تعني هذه السمة أنّ الهدف يجب ألا يكون مضمّنًا في برامج ثنائية تم إصدارها إلى مرحلة الإنتاج.

ولأنّه يتم فرض الاختبار فقط في وقت الإصدار، وليس في وقت التشغيل، وينشر بشكل سريع من خلال شجرة الاعتمادية، يجب تطبيقها بشكل دقيق. على سبيل المثال، يمكن أن تكون الرموز البديلة والمزيفة التي تكون مفيدة لاختبارات الوحدات مفيدة أيضًا لاختبارات الدمج التي تحتوي على البرامج الثنائية نفسها التي سيتم إصدارها للإنتاج، وبالتالي يجب ألا يتم وضع علامة عليها لاختبارها فقط. وبالعكس، يجب وضع علامة على القواعد التي تشكّل خطرًا في الربط، ربما لأنها تُلغي السلوك العادي بدون شروط.

toolchains

List of labels ; optional; nonconfigurable

مجموعة الأهداف التي يُسمح بمتغيراتها للوصول إليها. هذه الأهداف هي إما أمثلة للقواعد التي توفّر TemplateVariableInfo أو أهداف خاصة لأنواع السلاسل التجارية المضمّنة في Bazel. وتشمل هذه المعلومات ما يلي:

  • @bazel_tools//tools/cpp:current_cc_toolchain
  • @bazel_tools//tools/jdk:current_java_runtime

لاحظ أن هذا يختلف عن مفهوم دقة سلسلة الأدوات الذي تستخدمه عمليات تنفيذ القواعد في الضبط المستند إلى النظام الأساسي. ولا يمكنك استخدام هذه السمة لتحديد cc_toolchain أو java_toolchain المحدّد التي سيستخدمها الاستهداف.

visibility

List of labels ; optional; default default_visibility from package if specified, or //visibility:private otherwise; nonconfigurable

تتحكّم السمة visibility في الهدف في إمكانية استخدام الهدف في حِزم أخرى. اطّلِع على مستندات إذن الوصول.

السمات الشائعة لجميع قواعد الاختبار (*_test)

يوضّح هذا القسم السمات الشائعة لجميع قواعد الاختبار.

السمة الوصف
args

List of strings; optional; subject to $(location) and "Make variable" substitution, and Bourne shell tokenization

وسيطات سطر الأوامر التي يمرِّرها Bazel إلى الهدف عند تنفيذها باستخدام bazel test.

يتم تمرير هذه الوسيطات قبل أي قيمة من قيم --test_arg المحددة في سطر الأوامر bazel test.

env

Dictionary of strings; optional; values are subject to $(location) and "Make variable" substitution

تحدّد متغيّرات البيئة الإضافية المطلوب ضبطها عند تنفيذ الاختبار من قِبل bazel test.

لا تنطبق هذه السمة إلا على القواعد الأصلية، مثل cc_test وpy_test وsh_test. ولا ينطبق ذلك على قواعد الاختبار التي تحدّدها شركة Starlark. بالنسبة إلى قواعد Starlark الخاصة بك، يمكنك إضافة السمة "env" واستخدامها لتعبئة موفّر TestEnvironment.

env_inherit

List of strings; optional

تحدِّد متغيّرات البيئة الإضافية التي يتم اكتسابها من البيئة الخارجية عندما يتم تنفيذ الاختبار من قِبل bazel test.

لا تنطبق هذه السمة إلا على القواعد الأصلية، مثل cc_test وpy_test وsh_test. ولا ينطبق ذلك على قواعد الاختبار التي تحدّدها شركة Starlark.

size

String "enormous", "large" "medium" or "small", default is "medium"; optional; nonconfigurable

يحدّد الاختبار المستهدف:

وتُعتبر اختبارات الوحدات &"small"واختبارات التكامل &&;;;;;;و; البرنامج الشامل وال& ويُرجى إدخال "الكميات الكبيرة" أو "الحصرية" يستخدم Bazel الحجم لتحديد مهلة تلقائية يمكن تجاوزها باستخدام السمة timeout. يتم تطبيق المهلة على جميع الاختبارات في هدف BUILD، وليس لكل اختبار فردي. عند إجراء الاختبار على الجهاز، يتم استخدام size أيضًا لأغراض الجدولة: يحاول Bazel احترام --local_{ram,cpu}_resources وعدم إرباك الجهاز المحلي من خلال إجراء العديد من الاختبارات الصعبة في الوقت نفسه.

تتوافق أحجام الاختبار مع المهلات التلقائية التالية وتفترض استخدامات الموارد المحلية القصوى:

حجم الملف ذاكرة الوصول العشوائي (ميغابايت) وحدة المعالجة المركزية (CPU) (في وحدة المعالجة المركزية (CPU)) المهلة التلقائية
صغير 20 1 قصيرة (دقيقة واحدة)
متوسط 100 1 معتدل (5 دقائق)
كبير 300 1 طويل (15 دقيقة)
ضَخْم 800 1 الأبد (60 دقيقة)

سيتم ضبط متغيّر البيئة TEST_SIZE على قيمة هذه السمة عند بدء الاختبار.

timeout

String "short", "moderate", "long", "eternal" (with the default derived from the test's size attribute); nonconfigurable

المدة المتوقّعة لإجراء الاختبار قبل العودة إليه

على الرغم من أنّ سمة " حجم الاختبار" تتحكّم في تقدير الموارد، قد يتمّ ضبط مهلة الاختبار بشكل مستقل. إذا لم يتم تحديد هذا الإعداد بشكل صريح، يعتمد المهلة على حجم الاختبار&39;s. يمكن إلغاء مهلة الاختبار باستخدام العلامة --test_timeout، على سبيل المثال للتشغيل في ظل ظروف معيّنة معروف بها أنها بطيئة. تتوافق قيم مهلة الاختبار مع الفترات الزمنية التالية:

قيمة المهلة الفترة الزمنية
فيديو قصير دقيقة واحدة
معتدل 5 دقائق
شعر طويل 15 دقيقة
الأبد 60 دقيقة

في أوقات أخرى غير الحالات المذكورة أعلاه، يمكن إلغاء مهلة الاختبار باستخدام علامة البازيل --test_timeout، على سبيل المثال، للعمل يدويًا في ظل شروط معروف أنها بطيئة. قيم --test_timeout بالثواني. على سبيل المثال، سيضبط --test_timeout=120 مهلة الاختبار على دقيقتين.

سيتم ضبط متغيّر البيئة TEST_TIMEOUT على مهلة الاختبار (بالثواني) عند بدء الاختبار.

flaky

Boolean; optional; default False; nonconfigurable

اختبار العلامات على أنه غير مستقر.

في حال ضبط هذه السياسة، يتم تنفيذ الاختبار لما يصل إلى ثلاث مرات، مع وضع علامة "تعذّر" عليها إلا إذا تعذّر تنفيذها في كل مرة. ويتم ضبط هذه السمة تلقائيًا على "خطأ" ويتم تنفيذ الاختبار مرة واحدة فقط. ولا يُنصح عادةً باستخدام هذه السمة، لأنّه من المفترض أن تمرّ الاختبارات بشكل موثوق عندما تؤكّد الشركة على تأكيداتها.

shard_count

Non-negative integer less than or equal to 50; optional

تحدد عدد الأجزاء المتوازية المطلوب استخدامها لإجراء الاختبار.

ستلغي هذه القيمة أي إشارات مرجعية مُستخدَمة لتحديد عدد الأجزاء المتوازية التي سيتم تنفيذ الاختبار عليها. بالنسبة إلى بعض قواعد الاختبار، قد تكون هذه المعلّمة مطلوبة لتفعيل التجزئة في المقام الأول. يمكنك أيضًا الاطّلاع على --test_sharding_strategy.

في حال تفعيل جزء الاختبار، سيتم ضبط متغيّر البيئة TEST_TOTAL_SHARDS على هذه القيمة عند بدء الاختبار.

يتطلب التجزئة إلى إجراء الاختبار دعم بروتوكول الاختبار المقسّم. إذا لم يكن الأمر كذلك، من المرجح أن يتم إجراء كل اختبار في كل جزء، وهو ما لا تريده.

راجِع اختبار المشاركة في موسوعة الاختبار للحصول على تفاصيل حول عمليات التقسيم.

local

Boolean; default False; nonconfigurable

يفرض إجراء الاختبار محليًا، بدون وضع الحماية.

إنّ ضبط هذه السياسة على"صحيح"يعادل تقديم العلامة "local" كعلامة tags=["local"].

السمات المشتركة في جميع القواعد الثنائية (*_binary)

يوضّح هذا القسم السمات الشائعة لجميع قواعد البرنامج الثنائي.

السمة الوصف
args

List of strings; optional; subject to $(location) and "Make variable" substitution, and Bourne shell tokenization; nonconfigurable

وسيطات سطر الأوامر التي سيمرر Bazel إلى الهدف عند تنفيذها إما باستخدام الأمر run أو كاختبار. يتم تمرير هذه الوسيطات قبل الوسيطات المُحدّدة في سطر الأوامر bazel run أو bazel test.

ملاحظة: لا يتم تمرير الوسيطات عند تشغيل الهدف خارج Bazel (على سبيل المثال، من خلال تنفيذ البرنامج الثنائي يدويًا فيbazel-bin/).

env

Dictionary of strings; optional; values are subject to $(location) and "Make variable" substitution

تحدّد متغيّرات البيئة الإضافية المطلوب ضبطها عند تنفيذ الهدف من خلال bazel run.

لا تنطبق هذه السمة إلا على القواعد الأصلية، مثل cc_binary وpy_binary وsh_binary. ولا تنطبق هذه القواعد على القواعد التنفيذية التي حدّدتها Starlark.

ملاحظة: لا يتم ضبط متغيّرات البيئة عند تشغيل الهدف خارج Bazel (على سبيل المثال، من خلال تنفيذ البرنامج الثنائي يدويًا في bazel-bin/).

output_licenses

List of strings; optional

تراخيص ملفات الإخراج التي ينشئها هذا البرنامج الثنائي. هذا جزء من واجهة برمجة تطبيقات الترخيص التي تم إيقافها نهائيًا والتي لم تعد Bazel تستخدمها. لا تستخدمها.

سمات قابلة للضبط

معظم السمات هي "config;configurable&quot؛ ما يعني أنّ قيمها قد تتغيّر عند إنشاء الاستهداف بطرق مختلفة. على وجه التحديد، قد تختلف السمات التي يمكن ضبطها بناءً على العلامات التي يتم تمريرها إلى سطر الأوامر في Bazel، أو ما تعتمده الإجراءات المضمّنة في استلام البيانات من الهدف. ويمكن استخدام هذا الأمر على سبيل المثال لتخصيص الاستهداف للمنصات أو أوضاع التجميع المتعددة.

يوضّح المثال التالي مصادر مختلفة لبنيات الاستهداف المختلفة. سيؤدي تنفيذ bazel build :multiplatform_lib --cpu x86 إلى إنشاء الهدف باستخدام x86_impl.cc، في حين سيؤدي الاستبدال --cpu arm إلى استخدام arm_impl.cc بدلاً من ذلك.

cc_library(
    name = "multiplatform_lib",
    srcs = select({
        ":x86_mode": ["x86_impl.cc"],
        ":arm_mode": ["arm_impl.cc"]
    })
)
config_setting(
    name = "x86_mode",
    values = { "cpu": "x86" }
)
config_setting(
    name = "arm_mode",
    values = { "cpu": "arm" }
)

تختار الدالة select() من بين قيم بديلة مختلفة لسمة قابلة للضبط استنادًا إلى المعيار config_setting أو constraint_value الذي تتوافق معه الإعدادات المستهدفة.

يقيّم Bazel السمات القابلة للضبط بعد معالجة وحدات الماكرو وقبل قواعد المعالجة (من الناحية الفنية، بين مراحل التحميل والتحليل). لا تستطيع أي معالجة قبل تقييم select() معرفة الفرع الذي يختاره select(). على سبيل المثال، لا يمكن أن تغيّر وحدات الماكرو سلوكها استنادًا إلى الفرع الذي تم اختياره، ويمكن لمتصفّح bazel query التخمين الصحيح حول العناصر التابعة القابلة للضبط والمحدّدة. يمكنك الاطّلاع على هذه الأسئلة الشائعة للحصول على مزيد من المعلومات عن استخدام select() باستخدام القواعد ووحدات الماكرو.

لا يمكن للسمات التي تم وضع علامة nonconfigurable عليها في مستنداتها استخدام هذه الميزة. عادةً ما تكون السمة غير قابلة للضبط لأن Bazel تحتاج إلى معرفة قيمتها داخليًا قبل أن يمكنها تحديد كيفية حلّ select().

يمكنك الاطّلاع على سمات الإصدار القابلة للضبط للحصول على نظرة عامة تفصيلية.

أهداف المخرجات الضمنية

تم إيقاف النتائج الضمنية في C++. يُرجى عدم استخدام كلمات المرور هذه في لغات أخرى حيثما أمكن. لا يتوفّر لدينا مسار نهائي بعد، ولكن سيتم إيقافه في النهاية أيضًا.

عند تحديد قاعدة إصدار في ملف BUILD، أنت تشير صراحةً إلى هدف قاعدة مُسمّى جديد في حزمة. تتضمّن العديد من دوال قاعدة الإنشاء أيضًا ضمنيًا هدفًا واحدًا أو أكثر من أهداف ملف الإخراج، والتي يكون محتواها ومعانيها خاصة بالقواعد. على سبيل المثال، عندما تعلن بشكل صريح عن قاعدة java_binary(name='foo', ...)، أنت تُعلن أيضًا ضمنيًا عن ملف استهداف إخراج foo_deploy.jar كعضو في الحزمة نفسها. (هذا الهدف بالتحديد هو أرشيف Java مستقل ومناسب للنشر).

استهدافات النتائج الضمنية هي أعضاء من الدرجة الأولى في الرسم البياني المستهدف العام. وكما هو الحال مع الأهداف الأخرى، يتم إنشاؤها عند الطلب، إما عندما يتم تحديدها في أمر الإصدار ذي المستوى الأعلى أو عندما تكون متطلبات أساسية ضرورية لأهداف تصميم أخرى. ويمكن الإشارة إليها كاعتماديات في ملفات BUILD، ويمكن ملاحظتها في مخرجات أدوات التحليل مثل bazel query.

بالنسبة إلى كل نوع من أنواع الإصدارات، تحتوي مستندات القاعدة على قسم خاص يفصّل أسماء أي محتوى ضمني ومحتواه، ويتطلّب بيانًا لهذا النوع من القواعد.

من الاختلافات المهمة والبسيطة إلى حدٍّ ما بين مساحات الأسماء التي يستخدمها نظام الإصدار: التصنيفات تحدِّد targets، وقد تكون قواعد أو ملفات، وقد يتم تقسيم استهدافات الملفات إلى ملفات مصدر (أو إدخالات) وأهداف ملف مشتقة (أو مخرجات). إليك ما يمكنك ذكره في ملفات BUILD، أو الإنشاء من سطر الأوامر، أو إجراء فحص باستخدام bazel query. هذه هي مساحة الاسم المستهدفة. يقابل كل استهداف ملف ملفًا فعليًا واحدًا على القرص (اسم مساحة التخزين &نظام الملفات، &quot، ونظام التشغيل quot;file)، وقد يتوافق كل استهداف قاعدة مع صفر أو ملف واحد أو أكثر من القرص الفعلي. قد تكون هناك ملفات على القرص لا تحتوي على هدف مقابل، على سبيل المثال، لا يمكن الإشارة إلى ملفات الكائن .o أثناء تجميع C++ من داخل ملفات BUILD أو من سطر الأوامر. وبهذه الطريقة، قد تخفي أداة الإنشاء تفاصيل تنفيذ معيّنة لآلية عملها. وقد تم توضيح ذلك بمزيد من التفصيل في مرجع مفاهيم BUILD.