BazelCon 2022 מגיע בין 16 ל-17 בנובמבר לניו יורק באינטרנט.
הירשמו עוד היום!

C / C++ הכללים

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

כללים

cc_binary

cc_binary(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, includes, licenses, linkopts, linkshared, linkstatic, local_defines, malloc, nocopts, output_licenses, restricted_to, stamp, tags, target_compatible_with, testonly, toolchains, visibility, win_def_file)

יעדי פלט מרומזים

  • name.stripped (נוצר רק אם נשלחה בקשה מפורשת): גרסה בינארית עם פסים. הקובץ strip -g פועל בקובץ הבינארי כדי להסיר את הסמלים של ניפוי הבאגים. ניתן לספק אפשרויות נוספות לשורה בשורת הפקודה באמצעות --stripopt=-foo. הפלט הזה נוצר רק אם נשלחה בקשה מפורשת לכך.
  • name.dwp (נוצר רק אם נשלחה בקשה במפורש): אם Fisse מופעל: קובץ חבילת ניפוי באגים מתאים לניפוי באגים בינארי מרחוק. אחרת: קובץ ריק.

ארגומנטים

מאפיינים
name

Name; required

שם ייחודי ליעד הזה.

deps

List of labels; optional

רשימת הספריות האחרות שיש לקשר ליעד הבינארי.

היעדים יכולים להיות cc_library או objc_library.

srcs

List of labels; optional

רשימת הקבצים של C ו-C++ שנמצאים בעיבוד לצורך יצירת היעד. אלו הם קובצי מקור וכותרת של C/C+, שאינם נוצרים (קוד מקור רגיל) או נוצרים.

כל הקבצים, .cc, .c ו-.cpp ייערכו. ייתכן שייווצרו קבצים כאלה: אם קובץ מסוים נמצא ב-outs של כלל אחר, הכלל הזה יהיה תלוי באופן אוטומטי בכלל השני.

הקובץ .h לא ייאסף, אבל יהיה זמין להכללה על ידי מקורות בכלל הזה. קובצי .cc וגם .h יכולים לכלול כותרות ישירות ב-srcs האלה או ב-hdrs של כל כלל שמופיע בארגומנט deps.

יש לציין את כל #include הימים של הקבצים במאפיין srcs של הכלל הזה, או במאפיין hdrs של cc_library() קובצי עזר שהוזכרו. הסגנון המומלץ הוא לכותרות המשויכות לספרייה אחת שצריכות להיות באותו מאפיין ספרייה של hdrs, וכל הכותרות שמשויכות למקורות של הכלל הזה ב-srcs. אפשר למצוא תיאור מפורט יותר בקטע "Header include Check" לקבלת תיאור מפורט יותר.

אם שם של כלל נמצא ב-srcs, הכלל הזה תלוי באופן אוטומטי בכלל הזה. אם הכלל outs שנקרא הוא קובץ C או C++, הם מקובצים לכלל הזה. אם מדובר בקובצי ספרייה, הם מקושרים אליהם.

srcs סוגי קבצים מורשים:

  • קובצי מקור ב-C ו-C++: .c, .cc, .cpp, .cxx, .c++, .C
  • קובצי כותרת C ו-C+: .h, .hh, .hpp, .hxx, .inc, .inl, .H
  • הרכבה עם מעבד C מראש: .S
  • קובץ ארכיון: .a, .pic.a
  • " Always link" ספרייה: .lo, .pic.lo
  • ספרייה משותפת, מספר גרסה או גרסה ללא גרסה: .so, .so.version
  • קובץ אובייקט: .o, .pic.o

...וכל כלל שיוצר את הקבצים האלה. תוספים שונים מציינים שפות תכנות שונות בהתאם לנוהג של GCC.

additional_linker_inputs

List of labels; optional

יש להעביר את הקבצים האלה לפקודת המקשר C+.

לדוגמה, את קובצי ה-Windows res המשולבים אפשר לספק כאן כדי להטמיע ביעד הבינארי.

copts

List of strings; optional

יש להוסיף את האפשרויות האלה לפקודת הידור C++. כפופים ל- "Make variable" ולהחלפת אסימון מעטפת.

כל מחרוזת במאפיין הזה מתווספת בסדר הנתון ל-COPTS לפני הידור של היעד הבינארי. הסימונים נכנסים לתוקף רק כדי לאסוף את היעד הזה, ולא התלויים בו, לכן חשוב להפעיל שיקול דעת בכל הנוגע לקובצי כותרת שכלולים במקום אחר. כל המסלולים צריכים להיות ביחס לסביבת העבודה, ולא לחבילה הנוכחית.

אם החבילה מצהירה על התכונה no_copts_tokenization, אסימון מעטפת בורן חל רק על מחרוזות שמורכבות ממשתנה "Make".

defines

List of strings; optional

רשימת הגדרות שיש להוסיף לשורת העריכה. בכפוף להחלפת "Make" משתנה ואסימון מעטפת בורן. לכל מחרוזת, שחייבת להיות אסימון מעטפת אחד (Bourne), מצורף -D בתחילתה ומתווספת לשורת הפקודה של ה- היעד, וגם לכל כלל שתלוי בו. זהירות: ייתכן שיש לכך השפעות רחוקות מאוד. כשיש לך ספקות, צריך להוסיף ערכים להגדרה local_defines במקום זאת.
includes

List of strings; optional

רשימה של פריטים מסוג 'סטורי' שיש להוסיף לשורת ההרכב.

כפוף להחלפת "Make variable" . לפני כל מחרוזת מופיע הערך -isystem ומתווספת ל-COPTS. בניגוד ל-CLDS, הסימונים האלה מתווספים לכלל הזה ולכל כלל שתלוי בו. (הערה: לא הכללים שעליהם הם תלויים!) כדאי להיזהר מאוד, כי ייתכן שהאפקטים האלה יהיו בטווח הארוך. במקרה של ספק, יש להוסיף "-I" במקום זאת את הסימון CLDS.

צריך להוסיף כותרות ל- srcs או ל-hdr, אחרת הם לא יהיו זמינים בכללים תלויים כשהאוסף נמצא בארגז החול (ברירת המחדל).

linkopts

List of strings; optional

יש להוסיף את הסימונים האלה לפקודת המקשר C+. בכפוף להחלפת "Make" variable, אסימונים של מעטפת Buren והרחבת תווית. כל מחרוזת במאפיין הזה מתווספת ל-LINKOPTS לפני הקישור של היעד הבינארי.

כל רכיב ברשימה הזו שלא מתחיל ב-$ או ב-- נחשב כתווית של יעד ב-deps. רשימת הקבצים שנוצרו על ידי היעד הזה מצורפת לאפשרויות הקישור. יש דיווח על שגיאה אם התווית לא חוקית או לא מוצהרת ב-deps.

linkshared

Boolean; optional; nonconfigurable; default is False

יצירת ספרייה משותפת. כדי להפעיל את המאפיין הזה, יש לכלול את linkshared=True בכלל. כברירת מחדל, האפשרות הזו מושבתת.

הנוכחות של הדגל הזה מציינת שהקישור מתבצע עם התכונה -shared ל-gcc, והספרייה המשותפת המתקבלת מתאימה לטעינה לדוגמה של תוכנית Java. עם זאת, למטרות build, היא אף פעם לא תהיה מקושרת לבינארי התלוי, כי ההנחה היא שספריות משותפות שנוצרו עם הכלל cc_binary נטענים באופן ידני רק בתוכניות אחרות, ולכן הוא לא אמור להיות תחליף לכלל cc_library. כדי להרחיב את הגישה הזו, אנחנו ממליצים להימנע לחלוטין מהגישה הזו, ולאפשר לjava_library להסתמך רק על cc_library כללים במקום.

אם מציינים גם את linkopts=['-static'] וגם את linkshared=True, תהיה לך יחידה בודדת עצמאית לגמרי. אם תציינו גם את linkstatic=1 וגם את linkshared=True, תהיה לך יחידה בודדת, בעיקר עצמאית,

linkstatic

Boolean; optional; default is True

עבור cc_binary ו- cc_test: מקשרים את הקובץ הבינארי במצב סטטי. מידע על cc_library.linkstatic:

כברירת מחדל, האפשרות הזו מופעלת עבור cc_binary ועבור כל השאר.

אם האפשרות הזו היא בינארית או בדיקה, היא מאפשרת לכלי ה-build לקשר אל .a's במקום .so's את ספריות המשתמשים כאשר זה אפשרי. ייתכן שספריות מערכת מסוימות עדיין יהיו מקושרות, וכך גם ספריות שאין להן ספרייה סטטית. לכן קובץ ההפעלה שמתקבל עדיין יהיה מקושר באופן דינמי, ולכן רק לרוב סטטי.

יש שלוש דרכים שונות לקשר קובץ הפעלה:

  • analyticsIC עם תכונה full_static_link , שבה כל הנתונים מקושרים בצורה סטטית. למשל, "gcc -static foo.o libbar.a libbaz.a -lm".
    המצב הזה מופעל על ידי ציון הערך fully_static_link במאפיין features.
  • סטטיסטי, שבה כל ספריות המשתמשים מקושרות באופן סטטי (אם יש גרסה סטטית, ) אבל ספריות מערכת (למעט ספריות זמן ריצה של C/C+ ) מקושרות באופן דינמי, למשל " gcc foo.o libfoo.a libbaz.a -lm" .
    מצב זה מופעל כשמציינים linkstatic=True.
  • דינמי, שבו כל הספריות מקושרות באופן דינמי (אם יש גרסה דינמית, למשל, "gcc foo.o libfoo.so libbaz.so -lm".
    המצב הזה מופעל כשמציינים את linkstatic=False.

למאפיין linkstatic יש משמעות שונה אם משתמשים בו בכלל cc_library(). עבור ספריית C++ , linkstatic=True מציין שרק קישור סטטי מותר, לכן לא ייווצר .so. linkstatic=False לא מונע יצירה של ספריות סטטיות. המאפיין נועד לשלוט ביצירת ספריות דינמיות.

אם המדיניות linkstatic=False, הכלי ליצירת גרסאות ייצור קישורים סימבוליים לספריות משותפות שתלויות באזור *.runfiles.

local_defines

List of strings; optional

רשימת הגדרות שיש להוסיף לשורת העריכה. בכפוף להחלפת "Make" משתנה ואסימון מעטפת בורן. לפני כל מחרוזת, שחייבת להיות אסימון מעטפת Bourne אחד, מופיע לפני -D ומתווספת לשורת הפקודה של הידור עבור היעד הזה, אבל לא לתלויים בו.
malloc

Label; optional; default is @bazel_tools//tools/cpp:malloc

מגדירים את תלות ברירת המחדל ב- Malloc.

כברירת מחדל, קבצים בינאריים של C++ מקושרים ל-//tools/cpp:malloc, שהיא ספרייה ריקה כך שקובץ הבינארי של בסופו של דבר משתמש ב-Libc Malloc. תווית זו חייבת להפנות אל cc_library. אם הידור הוא עבור כלל שאינו C++, לאפשרות הזו אין השפעה. המערכת תתעלם מהערך של המאפיין הזה אם מציינים את linkshared=True.

nocopts

String; optional

צריך להסיר את האפשרויות התואמות מפקודת הידור C++. כפוף להחלפת "Make" variable. הערך של המאפיין הזה יפורש כביטוי רגולרי. כל COPTS קיים שתואם לביטוי הרגולרי הזה (כולל ערכים שצוינו במפורש במאפיין copts) יוסר מ-COPTS כדי לאסוף את הכלל הזה. אין צורך להשתמש במאפיין הזה.
stamp

Integer; optional; default is -1

אם מקודדים מידע על build בתוך הקובץ הבינארי. ערכים אפשריים:
  • stamp = 1: תמיד יש להכניס את פרטי ה-build לבינארי, גם ב---nostamp. אין להגדיר את ההגדרה הזו, כי היא עלולה להשבית את השמירה במטמון של הקובץ הבינארי ואת כל הפעולות שקשורות אליו, שתלויות בהמשך.
  • stamp = 0: תמיד להחליף את פרטי ה-build בערכים קבועים. הפעולה הזו עוזרת לשמור במטמון תוצאות חיפוש טובות.
  • stamp = -1: הטמעת פרטי build נשלטת על ידי הסימון --[no]stamp.

קבצים בינאריים עם חותמות לא נוצרים מחדש, אלא אם תלויות בהם.

win_def_file

Label; optional

קובץ ה-DEF של Windows יועבר ל-Linker.

יש להשתמש במאפיין הזה רק כאשר Windows היא פלטפורמת היעד. אפשר להשתמש בו כדי לייצא סמלים במהלך קישור של ספרייה משותפת.

עותק_של cc

cc_import(name, data, hdrs, alwayslink, compatible_with, deprecation, distribs, features, interface_library, licenses, restricted_to, shared_library, static_library, system_provided, tags, target_compatible_with, testonly, visibility)

הכללים של cc_import מאפשרים למשתמשים לייבא ספריות C/C++ שהוכנו מראש.

ברשימה הבאה מפורטים תרחישים לדוגמה:
1. קישור של ספרייה סטטית

cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  static_library = "libmylib.a",
  # If alwayslink is turned on,
  # libmylib.a will be forcely linked into any binary that depends on it.
  # alwayslink = 1,
)
2. קישור ספרייה משותפת (יוניקס)
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  shared_library = "libmylib.so",
)
3. קישור ספרייה משותפת לספריית ממשק (Windows)
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  # mylib.lib is a import library for mylib.dll which will be passed to linker
  interface_library = "mylib.lib",
  # mylib.dll will be available for runtime
  shared_library = "mylib.dll",
)
4. קישור של ספרייה משותפת אל system_provided=True (Windows)
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  # mylib.lib is an import library for mylib.dll which will be passed to linker
  interface_library = "mylib.lib",
  # mylib.dll is provided by system environment, for example it can be found in PATH.
  # This indicates that Bazel is not responsible for making mylib.dll available.
  system_provided = 1,
)
5. קישור לספרייה סטטית או משותפת
ב-Unix:
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  static_library = "libmylib.a",
  shared_library = "libmylib.so",
)

# first will link to libmylib.a
cc_binary(
  name = "first",
  srcs = ["first.cc"],
  deps = [":mylib"],
  linkstatic = 1, # default value
)

# second will link to libmylib.so
cc_binary(
  name = "second",
  srcs = ["second.cc"],
  deps = [":mylib"],
  linkstatic = 0,
)
ב-Windows:
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  static_library = "libmylib.lib", # A normal static library
  interface_library = "mylib.lib", # An import library for mylib.dll
  shared_library = "mylib.dll",
)

# first will link to libmylib.lib
cc_binary(
  name = "first",
  srcs = ["first.cc"],
  deps = [":mylib"],
  linkstatic = 1, # default value
)

# second will link to mylib.dll through mylib.lib
cc_binary(
  name = "second",
  srcs = ["second.cc"],
  deps = [":mylib"],
  linkstatic = 0,
)

ארגומנטים

מאפיינים
name

Name; required

שם ייחודי ליעד הזה.

hdrs

List of labels; optional

רשימת קובצי הכותרת שפורסמו על ידי הספרייה הערוכה הזו ייכללו באופן ישיר על ידי מקורות בכללים תלויים.

Boolean; optional; default is False

אם הערך 1, כל קובץ בינארי שתלוי (ישירות או עקיף) בספרייה שנוספה מראש ל-C++, יקשר בכל קובצי האובייקטים שהועברו לארכיון בספרייה הסטטית, גם אם חלקם לא מכילים סמלים שהקובץ הבינארי שלהם מפנה אליהם. אפשרות זו שימושית אם הקוד שלך לא מוגדר באופן מפורש כקוד בקובץ הבינארי, למשל אם הקוד שלך רשום לקבלת קריאה חוזרת (callback) על ידי שירות מסוים.

אם הקישור תמיד לא פועל עם VS 2017 ב-Windows, הסיבה לכך היא בעיה ידועה, יש לשדרג את VS 2017 לגרסה האחרונה.

interface_library

Label; optional

ספריית ממשק יחידה לקישור הספרייה המשותפת.

סוגי קבצים מותרים: .ifso, .tbd, .lib, .so או .dylib

shared_library

Label; optional

ספרייה משותפת מורכבת מראש. Bazel מוודא שהוא זמין לקובץ הבינארי שתלוי בו בזמן ריצה.

סוגי קבצים מותרים: .so, .dll או .dylib

static_library

Label; optional

ספרייה סטטית מורכבת מראש.

סוגי קבצים מותרים: .a, .pic.a או .lib

system_provided

Boolean; optional; default is False

אם הערך הוא 1, הוא מציין שהספרייה המשותפת הנדרשת בזמן הריצה ניתנת על ידי המערכת. במקרה כזה, צריך לציין את interface_library ואת הערך shared_library.

cc_library

cc_library(name, deps, srcs, data, hdrs, alwayslink, compatible_with, copts, defines, deprecation, distribs, exec_compatible_with, exec_properties, features, include_prefix, includes, interface_deps, licenses, linkopts, linkstamp, linkstatic, local_defines, nocopts, restricted_to, strip_include_prefix, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, win_def_file)

בדיקת הכללת כותרות

יש להצהיר על כל קובצי הכותרות שמופיעים ב-build בhdrs או בsrcs כללים של cc_*. זו אכיפה.

עבור כללי cc_library, כותרות ביחידה הארגונית hdrs מורכבות מהממשק הציבורי של הספרייה. ניתן לכלול אותן ישירות מהקבצים בhdrs ובsrcs של הספרייה עצמה, וגם מהקבצים בhdrs ובsrcs מתוך cc_* כללים שרושמים את הספרייה בdeps. את הכותרות ב-srcs יש לכלול ישירות רק מהקבצים ב-hdrs וב-srcs מהספרייה עצמה. כאשר צריך להחליט אם להוסיף כותרת לכותרת hdrs או srcs, צריך לשאול אם ברצונך שהצרכנים של הספרייה הזו יוכלו לכלול אותה ישירות. זו פחות או יותר החלטה בין public ל-private החשיפה בשפות התכנות.

לכללי cc_binary ו-cc_test אין ממשק מיוצא, ולכן גם אין להם מאפיין hdrs. כל הכותרות ששייכות לקובץ הבינארי או לבדיקה ישירות צריכות להופיע ב-srcs.

כדי להמחיש את הכללים האלה, אפשר להיעזר בדוגמה הבאה.

cc_binary(
    name = "foo",
    srcs = [
        "foo.cc",
        "foo.h",
    ],
    deps = [":bar"],
)

cc_library(
    name = "bar",
    srcs = [
        "bar.cc",
        "bar-impl.h",
    ],
    hdrs = ["bar.h"],
    deps = [":baz"],
)

cc_library(
    name = "baz",
    srcs = [
        "baz.cc",
        "baz-impl.h",
    ],
    hdrs = ["baz.h"],
)

הדוגמאות הישירות הכלולים בדוגמה הזו מפורטות בטבלה שבהמשך. לדוגמה, foo.cc יכול לכלול ישירות את foo.h ואת bar.h, אבל לא baz.h.

כולל קובץהכללה מותרת
foo.hBar.h
foo.ccfoo.h.h
Bar.hBar-impl.h baz.h
Bar-impl.hBar.h baz.h
Bar.ccBar.h Bar-impl.h baz.h
baz.hbaz-impl.h
baz-impl.hbaz.h
baz.ccbaz.h baz-impl.h

הכללים לבדיקת הכללה כוללים רק הכללה ישירה. בדוגמה שלמעלה, foo.cc יכול לכלול את bar.h, שעשוי לכלול את baz.h, שגם הוא יכול לכלול את baz-impl.h. מבחינה טכנית, האוסף של קובץ .cc עשוי לכלול קובץ טרשי של כותרת כלשהי ב-hdrs או ב-srcs בכל cc_library בסגירת ה-deps. במקרה הזה, המהדר יכול לקרוא את baz.h ואת baz-impl.h במהלך ההידור של foo.cc, אבל foo.cc לא יכול להכיל #include "baz.h". כדי לאשר זאת, יש להוסיף את baz אל deps מתוך foo.

לצערנו, כרגע לא ניתן להבחין בין 'הכללה' לבין 'עקיפה' לדוגמה, Bazel לא תתלונן אם בדוגמה שלמעלה foo.cc מתייחס ישירות ל-baz.h. זה לא חוקי, כי foo לא תלוי ישירות ב-baz. בשלב זה, לא נוצרת שגיאה במקרה כזה, אבל ייתכן שנוסיף בדיקות שגיאה כאלה בעתיד.

ארגומנטים

מאפיינים
name

Name; required

שם ייחודי ליעד הזה.

deps

List of labels; optional

רשימת הספריות האחרות שיש לקשר ליעד הבינארי.

היעדים יכולים להיות cc_library או objc_library.

srcs

List of labels; optional

רשימת הקבצים של C ו-C++ שנמצאים בעיבוד לצורך יצירת היעד. אלו הם קובצי מקור וכותרת של C/C+, שאינם נוצרים (קוד מקור רגיל) או נוצרים.

כל הקבצים, .cc, .c ו-.cpp ייערכו. ייתכן שייווצרו קבצים כאלה: אם קובץ מסוים נמצא ב-outs של כלל אחר, הכלל הזה יהיה תלוי באופן אוטומטי בכלל השני.

הקובץ .h לא ייאסף, אבל יהיה זמין להכללה על ידי מקורות בכלל הזה. קובצי .cc וגם .h יכולים לכלול כותרות ישירות ב-srcs האלה או ב-hdrs של כל כלל שמופיע בארגומנט deps.

יש לציין את כל #include הימים של הקבצים במאפיין srcs של הכלל הזה, או במאפיין hdrs של cc_library() קובצי עזר שהוזכרו. הסגנון המומלץ הוא לכותרות המשויכות לספרייה אחת שצריכות להיות באותו מאפיין ספרייה של hdrs, וכל הכותרות שמשויכות למקורות של הכלל הזה ב-srcs. אפשר למצוא תיאור מפורט יותר בקטע "Header include Check" לקבלת תיאור מפורט יותר.

אם שם של כלל נמצא ב-srcs, הכלל הזה תלוי באופן אוטומטי בכלל הזה. אם הכלל outs שנקרא הוא קובץ C או C++, הם מקובצים לכלל הזה. אם מדובר בקובצי ספרייה, הם מקושרים אליהם.

srcs סוגי קבצים מורשים:

  • קובצי מקור ב-C ו-C++: .c, .cc, .cpp, .cxx, .c++, .C
  • קובצי כותרת C ו-C+: .h, .hh, .hpp, .hxx, .inc, .inl, .H
  • הרכבה עם מעבד C מראש: .S
  • קובץ ארכיון: .a, .pic.a
  • " Always link" ספרייה: .lo, .pic.lo
  • ספרייה משותפת, מספר גרסה או גרסה ללא גרסה: .so, .so.version
  • קובץ אובייקט: .o, .pic.o

...וכל כלל שיוצר את הקבצים האלה. תוספים שונים מציינים שפות תכנות שונות בהתאם לנוהג של GCC.

hdrs

List of labels; optional

רשימת קובצי הכותרת שפורסמו על ידי הספרייה הזו ייכללו באופן ישיר על ידי מקורות בכללים תלויים.

זהו המיקום המועדף ביותר בהצהרה על קובצי כותרת שמתארים את הממשק של הספרייה. הכותרות האלה יהיו זמינות להכללה במקורות בכלל הזה או בכללים תלויים. במקום זאת, כותרות שאינן אמורות להיכלל על ידי לקוח של ספרייה זו צריכות להופיע במאפיין srcs, גם אם הן כלולות על ידי כותרת שפורסמה. אפשר למצוא תיאור מפורט יותר בקטע "Header include check" .

Boolean; optional; default is False

אם הערך 1, כל קובץ בינארי שתלוי (באופן ישיר או עקיף) בספרייה הזו ב-C++, יכלול קישור בכל קובצי האובייקטים של הקבצים המפורטים ב-srcs, גם אם חלק מהם לא מכילים סמלים הבינאריים נכללים. אפשרות זו שימושית אם הקוד שלך לא מוגדר באופן מפורש כקוד בקובץ הבינארי, למשל אם הקוד שלך רשום לקבלת קריאה חוזרת (callback) על ידי שירות מסוים.

אם הקישור תמיד לא פועל עם VS 2017 ב-Windows, הסיבה לכך היא בעיה ידועה, יש לשדרג את VS 2017 לגרסה האחרונה.

copts

List of strings; optional

יש להוסיף את האפשרויות האלה לפקודת הידור C++. כפופים ל-"Make variable" ולהחלפת אסימון מעטפת.

כל מחרוזת במאפיין הזה מתווספת בסדר הנתון ל-COPTS לפני הידור של היעד הבינארי. הסימונים נכנסים לתוקף רק כדי לאסוף את היעד הזה, ולא התלויים בו, לכן חשוב להפעיל שיקול דעת בכל הנוגע לקובצי כותרת שכלולים במקום אחר. כל המסלולים צריכים להיות ביחס לסביבת העבודה, ולא לחבילה הנוכחית.

אם החבילה מצהירה על התכונה no_copts_tokenization, אסימון מעטפת בורן חל רק על מחרוזות שמורכבות ממשתנה "Make".

defines

List of strings; optional

רשימת הגדרות שיש להוסיף לשורת העריכה. בכפוף להחלפת "Make" משתנה ואסימון מעטפת בורן. לכל מחרוזת, שחייבת להיות אסימון מעטפת אחד (Bourne), מצורף -D בתחילתה ומתווספת לשורת הפקודה של ה- היעד, וגם לכל כלל שתלוי בו. זהירות: ייתכן שיש לכך השפעות רחוקות מאוד. כשיש לך ספקות, צריך להוסיף ערכים להגדרה local_defines במקום זאת.
include_prefix

String; optional

הקידומת שיש להוסיף לנתיבים של הכותרות בכלל הזה.

כשהמדיניות הזו מוגדרת, הכותרות במאפיין hdrs של הכלל הזה נגישות הוא הערך של המאפיין שמצורף לנתיב היחסי ביחס למאגר.

התחילית של המאפיין strip_include_prefix תוסר לפני הוספת הקידומת.

includes

List of strings; optional

רשימה של פריטים מסוג 'סטורי' שיש להוסיף לשורת ההרכב.

כפוף להחלפת "Make variable" . לפני כל מחרוזת מופיע הערך -isystem ומתווספת ל-COPTS. בניגוד ל-CLDS, הסימונים האלה מתווספים לכלל הזה ולכל כלל שתלוי בו. (הערה: לא הכללים שעליהם הם תלויים!) כדאי להיזהר מאוד, כי ייתכן שהאפקטים האלה יהיו בטווח הארוך. במקרה של ספק, יש להוסיף "-I" במקום זאת את הסימון CLDS.

צריך להוסיף כותרות ל- srcs או ל-hdr, אחרת הם לא יהיו זמינים בכללים תלויים כשהאוסף נמצא בארגז החול (ברירת המחדל).

interface_deps

List of labels; optional

כשהמדיניות --experimental_cc_interface_deps מוגדרת כ-True, היעדים שרשומים בממשקי ה-API יפעלו כשיטות הטמעה. בניגוד לדייקים רגילים, הכותרות וכוללות את הנתיבים של נקודות השטיפה (וכל נקודות העקיפה של ההעברה) משמשות רק לאוסף של הספרייה הזו, ולא לספריות שתלויות בה. ספריות שתלויות בסמלי ההטמעה עדיין מקושרות ליעדים בינאריים שתלויים בספרייה הזו. התלויות הרשומה ב-API_deps תמשיך להתנהג באותו אופן שבו הן מתועדות עם נקודות השפל הקודמות, שבהן הכותרות והנתיבים ישודרו במורד הזרם.
linkopts

List of strings; optional

יש להוסיף את הסימונים האלה לפקודת המקשר C+. בכפוף להחלפת "Make" variable, אסימונים של מעטפת Buren והרחבת תווית. כל מחרוזת במאפיין הזה מתווספת ל-LINKOPTS לפני הקישור של היעד הבינארי.

כל רכיב ברשימה הזו שלא מתחיל ב-$ או ב-- נחשב כתווית של יעד ב-deps. רשימת הקבצים שנוצרו על ידי היעד הזה מצורפת לאפשרויות הקישור. יש דיווח על שגיאה אם התווית לא חוקית או לא מוצהרת ב-deps.

linkstamp

Label; optional

הידור בו-זמנית וקישור לקובץ המקור ב-C++ אל הבינארי הסופי. הטעיה הזו נחוצה כדי להציג את פרטי חותמת הזמן בקבצים בינאריים. אם אספנו את קובץ המקור לקובץ אובייקט בדרך הרגילה, חותמת הזמן תהיה שגויה. הידור של חותמת קישור לא יכול לכלול קבוצה מסוימת של התרעות מהדר, ולכן הוא לא צריך להיות תלוי בכותרת, באפשרות מהדר או במשתנה build אחר כלשהו. ניתן להשתמש באפשרות הזו רק בחבילה של base.
linkstatic

Boolean; optional; default is False

עבור cc_binary ו- cc_test: מקשרים את הקובץ הבינארי במצב סטטי. מידע על cc_library.linkstatic:

כברירת מחדל, האפשרות הזו מופעלת עבור cc_binary ועבור כל השאר.

אם האפשרות הזו היא בינארית או בדיקה, היא מאפשרת לכלי ה-build לקשר אל .a's במקום .so's את ספריות המשתמשים כאשר זה אפשרי. ייתכן שספריות מערכת מסוימות עדיין יהיו מקושרות, וכך גם ספריות שאין להן ספרייה סטטית. לכן קובץ ההפעלה שמתקבל עדיין יהיה מקושר באופן דינמי, ולכן רק לרוב סטטי.

יש שלוש דרכים שונות לקשר קובץ הפעלה:

  • analyticsIC עם תכונה full_static_link , שבה כל הנתונים מקושרים בצורה סטטית. למשל, "gcc -static foo.o libbar.a libbaz.a -lm".
    המצב הזה מופעל על ידי ציון הערך fully_static_link במאפיין features.
  • סטטיסטי, שבה כל ספריות המשתמשים מקושרות באופן סטטי (אם יש גרסה סטטית, ) אבל ספריות מערכת (למעט ספריות זמן ריצה של C/C+ ) מקושרות באופן דינמי, למשל " gcc foo.o libfoo.a libbaz.a -lm" .
    מצב זה מופעל כשמציינים linkstatic=True.
  • דינמי, שבו כל הספריות מקושרות באופן דינמי (אם יש גרסה דינמית, למשל, "gcc foo.o libfoo.so libbaz.so -lm".
    המצב הזה מופעל כשמציינים את linkstatic=False.

למאפיין linkstatic יש משמעות שונה אם משתמשים בו בכלל cc_library(). עבור ספריית C++, linkstatic=True מציין שרק קישור סטטי מותר, לכן לא ייווצר .so. linkstatic=False לא מונע יצירה של ספריות סטטיות. המאפיין נועד לשלוט ביצירת ספריות דינמיות.

אם המדיניות linkstatic=False, הכלי ליצירת גרסאות ייצור קישורים סימבוליים לספריות משותפות שתלויות באזור *.runfiles.

local_defines

List of strings; optional

רשימת הגדרות שיש להוסיף לשורת העריכה. בכפוף להחלפת "Make" משתנה ואסימון מעטפת בורן. לפני כל מחרוזת, שחייבת להיות אסימון מעטפת Bourne אחד, מופיע לפני -D ומתווספת לשורת הפקודה של הידור עבור היעד הזה, אבל לא לתלויים בו.
nocopts

String; optional

צריך להסיר את האפשרויות התואמות מפקודת הידור C++. כפוף להחלפת "Make" variable. הערך של המאפיין הזה יפורש כביטוי רגולרי. כל COPTS קיים שתואם לביטוי הרגולרי הזה (כולל ערכים שצוינו במפורש במאפיין copts) יוסר מ-COPTS כדי לאסוף את הכלל הזה. אין צורך להשתמש במאפיין הזה.
strip_include_prefix

String; optional

הקידומת שיש להסיר מהנתיבים של הכותרות האלה.

לאחר ההגדרה, הכותרות במאפיין hdrs של הכלל הזה יהיו נגישות בנתיב עם הקידומת הזו.

אם מדובר בנתיב יחסי, הוא נחשב כנתיב יחסי של חבילה. אם מדובר בנתיב מוחלט, הוא מובן כנתיב יחסי ביחס למאגר.

התחילית במאפיין include_prefix תתווסף אחרי שהקידומת הוסרה.

textual_hdrs

List of labels; optional

רשימת קובצי הכותרת שפורסמו על ידי הספרייה הזו צריכה להיכלל בטקסט על ידי מקורות בכללים תלויים.

זהו המיקום להצהרה על קובצי כותרת שלא ניתן להרכיב בעצמם, כלומר, הם תמיד צריכים לכלול טקסט בטקסט של קובצי מקור אחרים כדי ליצור קוד חוקי.

win_def_file

Label; optional

קובץ ה-DEF של Windows יועבר ל-Linker.

יש להשתמש במאפיין הזה רק כאשר Windows היא פלטפורמת היעד. אפשר להשתמש בו כדי לייצא סמלים במהלך קישור של ספרייה משותפת.

cc_proto_library

cc_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

cc_proto_library יוצר קוד C++ מ-.proto קבצים.

deps חייב להפנות אל הכללים של proto_library .

דוגמה:

cc_library(
    name = "lib",
    deps = [":foo_cc_proto"],
)

cc_proto_library(
    name = "foo_cc_proto",
    deps = [":foo_proto"],
)

proto_library(
    name = "foo_proto",
)

ארגומנטים

מאפיינים
name

Name; required

שם ייחודי ליעד הזה.

deps

List of labels; optional

רשימת הכללים מסוג proto_library ליצירת קוד C++.

fdo_prefetch_hints

fdo_prefetch_hints(name, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)

מייצג פרופיל רמזים לשליפה מראש של FDO שנמצא בסביבת העבודה או בנתיב מוחלט שצוין. דוגמאות:

fdo_prefetch_hints(
    name = "hints",
    profile = "//path/to/hints:profile.afdo",
)

fdo_profile(
  name = "hints_abs",
  absolute_path_profile = "/absolute/path/profile.afdo",
)

ארגומנטים

מאפיינים
name

Name; required

שם ייחודי ליעד הזה.

profile

Label; optional

התווית של פרופיל הרמזים. קובץ הרמזים מכיל את הסיומת afaf .התווית יכולה להצביע גם על כלל fdo_lbolute_path_profile.

fdo_profile

fdo_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, visibility)

מייצג פרופיל FDO שנמצא בסביבת העבודה או בנתיב מוחלט שצוין. דוגמאות:

fdo_profile(
    name = "fdo",
    profile = "//path/to/fdo:profile.zip",
)

fdo_profile(
  name = "fdo_abs",
  absolute_path_profile = "/absolute/path/profile.zip",
)

ארגומנטים

מאפיינים
name

Name; required

שם ייחודי ליעד הזה.

absolute_path_profile

String; optional

נתיב מוחלט לפרופיל ה-FDO. קובץ ה-FDO יכול לכלול רק את הסיומת afdo.
profile

Label; optional

התווית של פרופיל ה-FDO. קובץ ה-FDO יכול להיות אחד מהתוספים הבאים: .profraw עבור פרופיל LLVM של אינדקס, . .ffdata עבור פרופיל LLVM של אינדקס. .zip המכיל פרופיל LLVM של LLVM , .appdo עבור פרופיל AutoFDO , .xfdo עבור פרופיל XBinary. התווית יכולה גם להפנות לכלל fdo_lbolute_path_profile.
proto_profile

Label; optional

התווית של פרופיל Protobuf.

propleler_optimize

propeller_optimize(name, compatible_with, deprecation, distribs, features, ld_profile, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

מייצג פרופיל אופטימיזציה של Profeler בסביבת העבודה. דוגמה:

propeller_optimize(
    name = "layout",
    cc_profile = "//path:cc_profile.txt",
    ld_profile = "//path:ld_profile.txt"
)

propeller_optimize(
    name = "layout_absolute",
    absolute_cc_profile = "/absolute/cc_profile.txt",
    absolute_ld_profile = "/absolute/ld_profile.txt"
)

ארגומנטים

מאפיינים
name

Name; required

שם ייחודי ליעד הזה.

ld_profile

Label; optional

התווית של הפרופיל שהועברה לפעולת הקישור. לקובץ הזה יש סיומת txt.

cc_test

cc_test(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, includes, licenses, linkopts, linkstatic, local, local_defines, malloc, nocopts, restricted_to, shard_count, size, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility, win_def_file)

ארגומנטים

מאפיינים
name

Name; required

שם ייחודי ליעד הזה.

deps

List of labels; optional

רשימת הספריות האחרות שיש לקשר ליעד הבינארי.

היעדים יכולים להיות cc_library או objc_library.

srcs

List of labels; optional

רשימת הקבצים של C ו-C++ שנמצאים בעיבוד לצורך יצירת היעד. אלו הם קובצי מקור וכותרת של C/C+, שאינם נוצרים (קוד מקור רגיל) או נוצרים.

כל הקבצים, .cc, .c ו-.cpp ייערכו. ייתכן שייווצרו קבצים כאלה: אם קובץ מסוים נמצא ב-outs של כלל אחר, הכלל הזה יהיה תלוי באופן אוטומטי בכלל השני.

הקובץ .h לא ייאסף, אבל יהיה זמין להכללה על ידי מקורות בכלל הזה. קובצי .cc וגם .h יכולים לכלול כותרות ישירות ב-srcs האלה או ב-hdrs של כל כלל שמופיע בארגומנט deps.

יש לציין את כל #include הימים של הקבצים במאפיין srcs של הכלל הזה, או במאפיין hdrs של cc_library() קובצי עזר שהוזכרו. הסגנון המומלץ הוא לכותרות המשויכות לספרייה אחת שצריכות להיות באותו מאפיין ספרייה של hdrs, וכל הכותרות שמשויכות למקורות של הכלל הזה ב-srcs. אפשר למצוא תיאור מפורט יותר בקטע "Header include Check" לקבלת תיאור מפורט יותר.

אם שם של כלל נמצא ב-srcs, הכלל הזה תלוי באופן אוטומטי בכלל הזה. אם הכלל outs שנקרא הוא קובץ C או C++, הם מקובצים לכלל הזה. אם מדובר בקובצי ספרייה, הם מקושרים אליהם.

srcs סוגי קבצים מורשים:

  • קובצי מקור ב-C ו-C++: .c, .cc, .cpp, .cxx, .c++, .C
  • קובצי כותרת C ו-C+: .h, .hh, .hpp, .hxx, .inc, .inl, .H
  • הרכבה עם מעבד C מראש: .S
  • קובץ ארכיון: .a, .pic.a
  • " Always link" ספרייה: .lo, .pic.lo
  • ספרייה משותפת, מספר גרסה או גרסה ללא גרסה: .so, .so.version
  • קובץ אובייקט: .o, .pic.o

...וכל כלל שיוצר את הקבצים האלה. תוספים שונים מציינים שפות תכנות שונות בהתאם לנוהג של GCC.

additional_linker_inputs

List of labels; optional

יש להעביר את הקבצים האלה לפקודת המקשר C+.

לדוגמה, את קובצי ה-Windows res המשולבים אפשר לספק כאן כדי להטמיע ביעד הבינארי.

copts

List of strings; optional

יש להוסיף את האפשרויות האלה לפקודת הידור C++. כפופים ל- "Make variable" ולהחלפת אסימון מעטפת.

כל מחרוזת במאפיין הזה מתווספת בסדר הנתון ל-COPTS לפני הידור של היעד הבינארי. הסימונים נכנסים לתוקף רק כדי לאסוף את היעד הזה, ולא התלויים בו, לכן חשוב להפעיל שיקול דעת בכל הנוגע לקובצי כותרת שכלולים במקום אחר. כל המסלולים צריכים להיות ביחס לסביבת העבודה, ולא לחבילה הנוכחית.

אם החבילה מצהירה על התכונה no_copts_tokenization, אסימון מעטפת בורן חל רק על מחרוזות שמורכבות ממשתנה "Make".

defines

List of strings; optional

רשימת הגדרות שיש להוסיף לשורת העריכה. בכפוף להחלפת "Make" משתנה ואסימון מעטפת בורן. לכל מחרוזת, שחייבת להיות אסימון מעטפת אחד (Bourne), מצורף -D בתחילתה ומתווספת לשורת הפקודה של ה- היעד, וגם לכל כלל שתלוי בו. זהירות: ייתכן שיש לכך השפעות רחוקות מאוד. כשיש לך ספקות, צריך להוסיף ערכים להגדרה local_defines במקום זאת.
includes

List of strings; optional

רשימה של פריטים מסוג 'סטורי' שיש להוסיף לשורת ההרכב.

כפוף להחלפת "Make variable" . לפני כל מחרוזת מופיע הערך -isystem ומתווספת ל-COPTS. בניגוד ל-CLDS, הסימונים האלה מתווספים לכלל הזה ולכל כלל שתלוי בו. (הערה: לא הכללים שעליהם הם תלויים!) כדאי להיזהר מאוד, כי ייתכן שהאפקטים האלה יהיו בטווח הארוך. במקרה של ספק, יש להוסיף "-I" במקום זאת את הסימון CLDS.

צריך להוסיף כותרות ל- srcs או ל-hdr, אחרת הם לא יהיו זמינים בכללים תלויים כשהאוסף נמצא בארגז החול (ברירת המחדל).

linkopts

List of strings; optional

יש להוסיף את הסימונים האלה לפקודת המקשר C+. בכפוף להחלפת "Make" variable, אסימונים של מעטפת Buren והרחבת תווית. כל מחרוזת במאפיין הזה מתווספת ל-LINKOPTS לפני הקישור של היעד הבינארי.

כל רכיב ברשימה הזו שלא מתחיל ב-$ או ב-- נחשב כתווית של יעד ב-deps. רשימת הקבצים שנוצרו על ידי היעד הזה מצורפת לאפשרויות הקישור. יש דיווח על שגיאה אם התווית לא חוקית או לא מוצהרת ב-deps.

linkstatic

Boolean; optional; default is False

עבור cc_binary ו- cc_test: מקשרים את הקובץ הבינארי במצב סטטי. מידע על cc_library.linkstatic:

כברירת מחדל, האפשרות הזו מופעלת עבור cc_binary ועבור כל השאר.

אם האפשרות הזו היא בינארית או בדיקה, היא מאפשרת לכלי ה-build לקשר אל .a's במקום .so's את ספריות המשתמשים כאשר זה אפשרי. ייתכן שספריות מערכת מסוימות עדיין יהיו מקושרות, וכך גם ספריות שאין להן ספרייה סטטית. לכן קובץ ההפעלה שמתקבל עדיין יהיה מקושר באופן דינמי, ולכן רק לרוב סטטי.

יש שלוש דרכים שונות לקשר קובץ הפעלה:

  • analyticsIC עם תכונה full_static_link , שבה כל הנתונים מקושרים בצורה סטטית. למשל, "gcc -static foo.o libbar.a libbaz.a -lm".
    המצב הזה מופעל על ידי ציון הערך fully_static_link במאפיין features.
  • סטטיסטי, שבה כל ספריות המשתמשים מקושרות באופן סטטי (אם יש גרסה סטטית, ) אבל ספריות מערכת (למעט ספריות זמן ריצה של C/C+ ) מקושרות באופן דינמי, למשל " gcc foo.o libfoo.a libbaz.a -lm" .
    מצב זה מופעל כשמציינים linkstatic=True.
  • דינמי, שבו כל הספריות מקושרות באופן דינמי (אם יש גרסה דינמית, למשל, "gcc foo.o libfoo.so libbaz.so -lm".
    המצב הזה מופעל כשמציינים את linkstatic=False.

למאפיין linkstatic יש משמעות שונה אם משתמשים בו בכלל cc_library(). עבור ספריית C++ , linkstatic=True מציין שרק קישור סטטי מותר, לכן לא ייווצר .so. linkstatic=False לא מונע יצירה של ספריות סטטיות. המאפיין נועד לשלוט ביצירת ספריות דינמיות.

אם המדיניות linkstatic=False, הכלי ליצירת גרסאות ייצור קישורים סימבוליים לספריות משותפות שתלויות באזור *.runfiles.

local_defines

List of strings; optional

רשימת הגדרות שיש להוסיף לשורת העריכה. בכפוף להחלפת "Make" משתנה ואסימון מעטפת בורן. לפני כל מחרוזת, שחייבת להיות אסימון מעטפת Bourne אחד, מופיע לפני -D ומתווספת לשורת הפקודה של הידור עבור היעד הזה, אבל לא לתלויים בו.
malloc

Label; optional; default is @bazel_tools//tools/cpp:malloc

מגדירים את תלות ברירת המחדל ב- Malloc.

כברירת מחדל, קבצים בינאריים של C++ מקושרים ל-//tools/cpp:malloc, שהיא ספרייה ריקה כך שקובץ הבינארי של בסופו של דבר משתמש ב-Libc Malloc. תווית זו חייבת להפנות אל cc_library. אם הידור הוא עבור כלל שאינו C++, לאפשרות הזו אין השפעה. המערכת תתעלם מהערך של המאפיין הזה אם מציינים את linkshared=True.

nocopts

String; optional

צריך להסיר את האפשרויות התואמות מפקודת הידור C++. כפוף להחלפת "Make" variable. הערך של המאפיין הזה יפורש כביטוי רגולרי. כל COPTS קיים שתואם לביטוי הרגולרי הזה (כולל ערכים שצוינו במפורש במאפיין copts) יוסר מ-COPTS כדי לאסוף את הכלל הזה. אין צורך להשתמש במאפיין הזה.
stamp

Integer; optional; default is 0

אם מקודדים מידע על build בתוך הקובץ הבינארי. ערכים אפשריים:
  • stamp = 1: תמיד יש להכניס את פרטי ה-build לבינארי, גם ב---nostamp. אין להגדיר את ההגדרה הזו, כי היא עלולה להשבית את השמירה במטמון של הקובץ הבינארי ואת כל הפעולות שקשורות אליו, שתלויות בהמשך.
  • stamp = 0: תמיד להחליף את פרטי ה-build בערכים קבועים. הפעולה הזו עוזרת לשמור במטמון תוצאות חיפוש טובות.
  • stamp = -1: הטמעת פרטי build נשלטת על ידי הסימון --[no]stamp.

קבצים בינאריים עם חותמות לא נוצרים מחדש, אלא אם תלויות בהם.

win_def_file

Label; optional

קובץ ה-DEF של Windows יועבר ל-Linker.

יש להשתמש במאפיין הזה רק כאשר Windows היא פלטפורמת היעד. אפשר להשתמש בו כדי לייצא סמלים במהלך קישור של ספרייה משותפת.

cc_toolschain

cc_toolchain(name, all_files, ar_files, as_files, compatible_with, compiler, compiler_files, compiler_files_without_includes, coverage_files, cpu, deprecation, distribs, dwp_files, dynamic_runtime_lib, exec_transition_for_inputs, features, libc_top, licenses, linker_files, module_map, objcopy_files, restricted_to, static_runtime_lib, strip_files, supports_header_parsing, supports_param_files, tags, target_compatible_with, testonly, toolchain_config, toolchain_identifier, visibility)

מייצג מחזיק כלי +C+.

כלל זה אחראי על:

  • איסוף כל פריטי המידע הנחוצים עבור פעולות C++ להפעלה. הפעולה הזו מתבצעת על ידי מאפיינים כמו all_files, compiler_files, linker_files או מאפיינים אחרים שמסתיימים ב-_files). בדרך כלל אלה קבוצות קבצים שמכילות את כל הקבצים הנדרשים.
  • יצירת שורות פקודה נכונות לפעולות C++. הדבר מתבצע באמצעות ספק CcToolchainConfigInfo (פרטים נוספים בהמשך).

יש להשתמש במאפיין toolchain_config כדי להגדיר את C++ לארגז הכלים. כדאי לעיין גם ב דף זה כדי לקבל את פירוט התצורה של כלי +C++ ואת הבורר לבחירת הכלים.

יש להשתמש ב-tags = ["manual"] כדי למנוע יצירה של ערכות כלים והגדרתן שלא לצורך בעת הפעלה של bazel build //...

ארגומנטים

מאפיינים
name

Name; required

שם ייחודי ליעד הזה.

all_files

Label; required

אוסף של כל הפריטים ב-cc_toolschain. פריטי המידע האלה יתווספו כקלט לכל הפעולות הקשורות לכללים_cc (למעט פעולות שמשתמשות בקבוצות מדויקות יותר של חפצים מהמאפיינים הבאים). Bazel מניח ש-all_files היא קבוצת-על של כל המאפיינים האחרים שמספקים פריטים (למשל, הידור חותמת הקישור דורש הידור של קובצי קישור וקישור לקובץ, ולכן נדרש all_files.

זה מה שמופיע בcc_toolchain.files, והוא משמש את כל הכללים של Starlark באמצעות C+chain Chain.

ar_files

Label; optional

אוסף של כל הפריטים מסוג cc_toolschain שנדרשים לפעולות העברה לארכיון.

as_files

Label; optional

אוסף של כל הפריטים מסוג cc_toolschain שנדרשים לפעולות הרכבה.

compiler

String; optional; nonconfigurable

הוּצא משימוש. במקום זאת, יש להשתמש במאפיין toolchain_identifier. הוא יחזור לפעילות אחרי CROSSTOOL העברה אל Starlark , והוא יוסר עד #7075.

כאשר הוא מוגדר, הוא משמש לביצוע בחירה של Crosstools_config.toolschain. הוא יקבל עדיפות על פני האפשרות של Cc Bazel.

compiler_files

Label; required

אוסף של כל הפריטים מסוג cc_toolschain שנדרשים לפעולות הידור.

כרגע, נעשה שימוש רק בפעולות lto_backend, בפעולות הידור רגילות נעשה שימוש ב-all_files (#6927).

compiler_files_without_includes

Label; optional

אוסף של כל הפריטים מסוג cc_toolschain שנדרשים לפעולות הידור למקרה שבו נתמך קלט קלט (כרגע זמין ב-Google בלבד).
coverage_files

Label; optional

אוסף של כל הפריטים מסוג cc_toolschain שנדרשים לפעולות כיסוי. אם לא צוין, ייעשה שימוש ב-all_files.
cpu

String; optional; nonconfigurable

הוּצא משימוש. במקום זאת, יש להשתמש במאפיין Toolchain_identifier. המוצר מוחרג אחרי CROSStools – העברה ל-Starlark והוא יוסר עד #7075.

כאשר הוא מוגדר, הוא משמש לביצוע בחירה של Crosstools_config.toolschain. הוא יקבל עדיפות על פני האפשרות של Cc Bazel.

dwp_files

Label; required

אוסף של כל הפריטים מסוג cc_toolschain שנדרשים לפעולות dwp.
dynamic_runtime_lib

Label; optional

פריט לספרייה דינמית לספרייה בזמן ריצה של C++ (למשל libstdc++.so).

ייעשה שימוש כאשר &'static_link_cpp_runtimes' התכונה מופעלת, ואנחנו מקשרים יחסי תלות באופן דינמי.

exec_transition_for_inputs

Boolean; optional; default is True

יש להגדיר את הערך True כדי ליצור את כל הקלט של הקבצים ל-cc_toolschaing עבור פלטפורמת ה-exec, במקום להשתמש במעבר (כלומר, לטרגט את הפלטפורמה כברירת מחדל).
libc_top

Label; optional

אוסף של פריטי מידע שנוצרו בתהליך פיתוח (Artifact) שהועברו כקלט לפעולות הידור/קישור.
linker_files

Label; required

אוסף של כל הפריטים מסוג cc_toolschain שנדרשים לפעולות קישור.
module_map

Label; optional

מודול של פריט מידע שנוצר בתהליך מיפוי לשימוש על בסיס מודולים מודולריים.
objcopy_files

Label; required

אוסף של כל האובייקטים מסוג cc_toolschain שנדרש לפעולות אובייקט.
static_runtime_lib

Label; optional

פריטי מידע מספרייה סטטית עבור ספריית זמן ריצה של C++ (למשל libstdc++.a).

המערכת תשתמש בהגדרה הזו כאשר &&39;static_link_cpp_runtimes' מופעלת, ואנחנו מקשרים יחסי תלות באופן סטטי.

strip_files

Label; required

אוסף של כל הפריטים ב-cc_toolschain שנדרשים לביצוע פעולות ברצועה.
supports_header_parsing

Boolean; optional; default is False

הערך צריך להיות True כאשר cc_toolschain תומך בפעולות של ניתוח כותרות.
supports_param_files

Boolean; optional; default is True

הערך צריך להיות True כאשר cc_toolschain תומך בשימוש בקובצי פרמטרים לפעולות קישור.
toolchain_config

Label; required

התווית של הכלל שמספק את cc_toolchain_config_info.
toolchain_identifier

String; optional; nonconfigurable

המזהה המשמש להתאמה של cc_toolschain הזה עם ה-Crosstools_config.toolschain.

עד שהבעיה #5380 תיפתר, זו הדרך המומלצת לשייך את cc_toolchain אל CROSSTOOL.toolchain. הוא יוחלף במאפיין toolchain_config (#5380).

cc_toolschain_Suite

cc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

מייצג אוסף של ערכות כלים +C+.

כלל זה אחראי על:

  • איסוף כל ערכות הכלים +C+ הרלוונטיות.
  • בחירה בארגז כלים אחד בהתאם לאפשרויות של --cpu ושל --compiler הועברה ל-Bazel.

כדאי לעיין גם ב דף זה כדי לקבל את פירוט התצורה של כלי +C++ ואת הבורר לבחירת הכלים.

ארגומנטים

מאפיינים
name

Name; required

שם ייחודי ליעד הזה.

toolchains

Dictionary mapping strings to labels; required; nonconfigurable

מפה מ-"<cpu>" או "<cpu>|< Compr>"&string; לתווית cc_toolchain. ייעשה שימוש ב-"<cpu>" רק אם --cpu יועבר ל-Bazel, וב-"<cpu>|< Compr>" ייעשה שימוש כאשר גם --cpu וגם --compiler יועברו ל-Bazel. דוגמה:

          cc_toolchain_suite(
            name = "toolchain",
            toolchains = {
              "piii|gcc": ":my_cc_toolchain_for_piii_using_gcc",
              "piii": ":my_cc_toolchain_for_piii_using_default_compiler",
            },
          )