تصف هذه الصفحة كيفية الدمج مع قواعد C++ على المستويات المختلفة.
الوصول إلى سلسلة أدوات C++
وبسبب
نقل قواعد C++ المستمرة إلى الأنظمة الأساسية وسلاسل الأدوات، عليك استخدام تطبيق المساعد المتوفرة على
@bazel_tools//tools/cpp:toolchain_utils.bzl،
التي تعمل عند إيقاف سلاسل الأدوات وتفعيلها. بالاعتماد على سلسلة أدوات C++
في قاعدتك، أضِف سمة
Label
اسمها _cc_toolchain
واحرِص على
توجيهها إلى @bazel_tools//tools/cpp:current_cc_toolchain
(مثال على
قاعدة cc_toolchain_alias
، التي تشير إلى سلسلة أدوات C++ المحدّدة حاليًا).
وبعد ذلك، عند تنفيذ القاعدة، استخدِم
find_cpp_toolchain(ctx)
للحصول على
CcToolchainInfo
.
يمكن العثور على مثال كامل قيد التشغيل
في أمثلةrules_cc.
إنشاء سطور الأوامر ومتغيرات البيئة باستخدام سلسلة أدوات C++
بشكل أساسي، يمكنك الدمج مع سلسلة أدوات C++ للحصول على علامات سطر الأوامر نفسها المتوفّرة في قواعد C++، ولكن بدون استخدام إجراءات C++ مباشرةً. ويرجع السبب في ذلك إلى أنه عند كتابة الإجراءات الخاصة بنا، يجب أن تتصرف بطريقة متسقة مع سلسلة أدوات C++، على سبيل المثال، تمرير علامات أوامر C++ إلى أداة يستدعي عليها التجميع البرمجي من C++ خلف الكواليس.
تستخدم قواعد C++ طريقة خاصة لإنشاء سطور الأوامر استنادًا إلى إعداد الميزات. لإنشاء سطر أوامر، تحتاج إلى ما يلي:
features
وaction_configs
: هذه القيم صادرة عنCcToolchainConfigInfo
وتمّت قراءتها فيCcToolchainInfo
.FeatureConfiguration
- تم إرجاعه بواسطة cc_ common.configure_features- متغيّرات إعداد الأداة "نسخة إلى" - يتم عرضها حسب cc_Common.create_compile_variables أو cc_Common.create_link_variables.
لا تزال هناك أدوات إرجاع محددة لأداة، مثل
compiler_executable.
أفضّل get_tool_for_action
أكثر من ذلك، لأنه ستتم في النهاية إزالة الأدوات الخاصة بالأدوات.
يمكن العثور على مثال كامل قيد التشغيل في أمثلةrules_cc.
تنفيذ قواعد Starlark التي تعتمد على قواعد C++ و/أو يمكن أن تعتمد قواعد C++ على
توفّر معظم قواعد C++
CcInfo
،
لمقدّم خدمة يحتوي على CompilationContext
وLinkingContext
.
ومن خلال هذه الصفحات، يمكن الوصول إلى معلومات مثل جميع العناوين أو المكتبات الانتقالية التي تريد ربطها. من CcInfo
ومن CcToolchainInfo
قواعد
Starlark المخصّصة، سيكون من الممكن الحصول على جميع المعلومات التي تحتاج إليها.
إذا كانت قاعدة Starlark المخصصة تقدم CcInfo
، فهي إشارة إلى قواعد C++ التي يمكنها الاعتماد عليها أيضًا. ومع ذلك، يجب توخي الحذر - إذا كنت تحتاج إلى نشر
CcInfo
فقط من خلال الرسم البياني إلى القاعدة الثنائية التي تستفيد منه، يمكنك لف
CcInfo
في مقدِّم خدمة مختلف. على سبيل المثال، إذا أرادت قاعدة java_library
نشر تبعيات المحتوى الأصلي إلى java_binary
، يجب ألا تقدّم CcInfo
مباشرةً (cc_binary
بناءً على java_library
. منطقي)، يجب التفافه، على سبيل المثال، JavaCcInfo
.
يمكن العثور على مثال كامل قيد التشغيل في أمثلةrules_cc.
إعادة استخدام المنطق وإجراءات قواعد C++
غير مستقر حتى الآن، سيتم تعديل هذا القسم فور استقرار واجهة برمجة التطبيقات. اتّبِع رقم 4570 للاطّلاع على أحدث المعلومات.