שילוב עם כללי C++

דף זה מתאר כיצד לשלב עם כללי C++ ברמות שונות.

גישה ל-C++ Toolchain

בשל העברה מתמדת של כללי C++ לפלטפורמות ול כלי כלים, יש להשתמש בכלי העזרה זמין ב- @bazel_tools//tools/cpp:toolchain_utils.bzl, שפועל גם כאשר משביתים את 'כלים' ומפעילים אותם. כדי תלויים ב-C++ chachain בכלל שלכם, יש להוסיף 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++

עדיין לא יציבה; הקטע הזה יתעדכן לאחר שממשק ה-API יתייצב. יש להשתמש ב- #4570 לקבלת מידע עדכני.