דף זה מתאר כיצד לשלב עם כללי 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++ משתמשים בדרך מיוחדת לבניית שורות פקודה המבוססות על תצורת תכונות. כדי לבנות שורת פקודה, צריך:
featuresוaction_configs- אלה מגיעים מ-CcToolchainConfigInfoועוטפים ב-CcToolchainInfoFeatureConfiguration- הוחזרה על ידי cc_Common.config_features- משתני cc Toolchain - הוחזרו על ידי 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++
עדיין לא יציבה; הקטע הזה יתעדכן לאחר שממשק ה-API יתייצב. יש להשתמש ב- #4570 לקבלת מידע עדכני.