الدمج مع قواعد C++

تصف هذه الصفحة كيفية الدمج مع قواعد 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++ طريقة خاصة لإنشاء سطور الأوامر استنادًا إلى إعداد الميزات. لإنشاء سطر أوامر، تحتاج إلى ما يلي:

لا تزال هناك أدوات إرجاع محددة لأداة، مثل 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 للاطّلاع على أحدث المعلومات.