דף זה מתאר כיצד לשלב עם כללי 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
ועוטפים ב-CcToolchainInfo
FeatureConfiguration
- הוחזרה על ידי 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 לקבלת מידע עדכני.