דף זה מכסה את השיטות המומלצות לשימוש ב-Bazel ב-Windows. הוראות להתקנה מפורטות במאמר Install Bazel ב-Windows.
בעיות ידועות
בעיות Bazel הקשורות ל-Windows מסומנות בתווית "team-Windows" ב-GitHub. כאן אפשר לראות את הבעיות הפתוחות.
שיטות מומלצות
הימנעו מבעיות במסלול ארוך
בכלים מסוימים יש את הגבלת האורך המקסימלי של הנתיב ב-Windows, כולל מהדר MSVC. כדי למנוע בעיה זו, ניתן לציין ספריית פלט קצרה עבור Bazel באמצעות התכונה --פלט_משתמש_שורש.
לדוגמה, יש להוסיף את השורה הבאה לקובץ ה-bazelrc:
startup --output_user_root=C:/tmp
הפעלת תמיכה בשם קובץ בגרסה 8.3
Bazel מנסה ליצור גרסה עם שם מקוצר לנתיבי קבצים ארוכים. אבל כדי לעשות זאת, צריך להפעיל את התמיכה בפורמט שם הקובץ 8.3 בנפח שבו נמצא הקובץ עם הנתיב הארוך. ניתן להפעיל יצירת שם 8.3 בכל הכרכים על ידי הרצת הפקודה הבאה:
fsutil 8dot3name set 0
הפעלת תמיכה בסמלי קישור
כדי להשתמש בחלק מהפיצ'רים, צריך לוודא ש-Bazel יכולה ליצור סמלים לקבצים ב-Windows. לשם כך, צריך להפעיל את מצב פיתוח (ב-Windows 10, גרסה 1703 ואילך) או להפעיל את Bazel כמנהל מערכת. פעולה זו מאפשרת את התכונות הבאות:
כדי להקל על התהליך, הוסיפו את השורות הבאות לקובץ ה-Bazelrc:
startup --windows_enable_symlinks
build --enable_runfiles
הערה: יצירת קישורים סימבוליים ב-Windows היא פעולה יקרה. הסימון של --enable_runfiles
עשוי ליצור כמות גדולה של קישורי קישור לקבצים. יש להפעיל את התכונה הזו רק כשצריך.
Bazel פועל: מעטפת MSYS2 לעומת שורת פקודה לעומת PowerShell
המלצה: Run Bazel משורת הפקודה (cmd.exe
) או מ-PowerShell.
החל מ-15 בינואר 2020, אין להריץ Bazel מ-bash
– ממעטפת MSYS2 או מ-Git Bash או מ-Cygwin או מכל וריאציה אחרת של Bash. Bazel עשוי לפעול ברוב המקרים, אבל חלק מהדברים לא תקינים, כמו שיבוש של גרסת build עם Ctrl+C מ-MSYS2).
כמו כן, אם תבחרו להריץ מתחת ל-MSYS2, תצטרכו להשבית את המרת הנתיב האוטומטית של MSYS2&re.
אחרת, מערכת MSYS תמיר את הארגומנטים של שורת הפקודה שנראים כמו נתיבי Unix (כמו //foo:bar
) לנתיבי Windows. לפרטים נוספים, ראו את התשובה ב-Stack Overflow.
שימוש ב-Bazel ללא Bash (MSYS2)
שימוש ב-Bazal ללא בד
גרסאות Bazel לפני 1.0 דרשו מ-Bash לבנות כללים מסוימים.
החל מ-Bazel 1.0, ניתן ליצור כל כלל ללא Bash, אלא אם:
genrule
, מכיוון שכללי יצירת הפקודות באש- כלל אחד (
sh_binary
) או כלל אחד (sh_test
), כי מטבעם יש צורך ב-Bassh - כלל Starlark שמשתמש ב-
ctx.actions.run_shell()
או ב-ctx.resolve_command()
עם זאת, לעיתים קרובות הקובץ genrule
משמש למשימות פשוטות כמו
העתקת קובץ
או כתיבת קובץ טקסט.
במקום להשתמש ב-genrule
(ובהתאם ל-Bash) תוכלו למצוא כלל מתאים במאגר של Bazel-skylib.
אם אתם משתמשים ב-Windows, הכללים האלה לא מחייבים שיוך.
שימוש בבדיקת בסיס ללא בס
גרסאות Bazel לפני 1.0 דרשו מ-Bash להירשם למינוי bazel test
.
החל מ-Bazel 1.0, ניתן לבדוק כל כלל ללא Bash, למעט כאשר:
- את/ה משתמש/ת ב-
--run_under
- כלל הבדיקה עצמו מצריך Boh (כי קובץ ההפעלה שלו הוא סקריפט קונכיה)
שימוש ב-Bazal ללא Boh
גרסאות Bazel לפני 1.0 דרשו מ-Bash להירשם למינוי bazel run
.
החל מ-Bazel 1.0, ניתן להפעיל כל כלל ללא Bash, אלא אם:
- יש לך
--run_under
או--script_path
- כלל הבדיקה עצמו מצריך Boh (כי קובץ ההפעלה שלו הוא סקריפט קונכיה)
משתמשים בכללי shבינארי ו-sh* ו-ctx.actions.run_shell() ללא Boh
כדי ליצור ולבדוק כללי sh_*
, צריך להשתמש ב-Bshash ולבנות ולבדוק כללי Starlark שמשתמשים ב-ctx.actions.run_shell()
וב-ctx.resolve_command()
. הדבר חל לא רק על כללים בפרויקט, אלא גם על כללים בכל אחד מהמאגרים החיצוניים שהפרויקט תלוי בהם (גם באופן זמני).
בעתיד, ייתכן שתהיה אפשרות להשתמש במערכת המשנה של Windows עבור Linux (WSL) כדי לבנות את הכללים האלו, אך כרגע היא לא בעדיפות של צוות המשנה של Bazel-on-Windows.
הגדרת משתני סביבה
משתני סביבה שמגדירים בשורת הפקודה (cmd.exe
) של Windows מוגדרים רק בסשן הזה של שורת הפקודה. אם מתחילים cmd.exe
חדש, צריך להגדיר שוב את המשתנים. כדי להגדיר תמיד את המשתנים כש-cmd.exe
מתחיל, אפשר להוסיף אותם למשתני המשתמש או למשתני המערכת בתיבת הדו-שיח Control Panel >
System Properties > Advanced > Environment Variables...
.
Build ב-Windows
בניית C++ עם MSVC
כדי ליצור יעדים מסוג C++ עם MSVC, עליכם:
(אופציונלי) משתנה הסביבה
BAZEL_VC
ו-BAZEL_VC_FULL_VERSION
.Bazel מזהה באופן אוטומטי את המהדר החזותי C++ במערכת שלך. כדי לבקש מ-Bazel להשתמש בהתקנת VC ספציפית, תוכלו להגדיר את משתני הסביבה הבאים:
ב-Visual Studio ל-2017 ול-2019, צריך להגדיר אחת מהאפשרויות הבאות:
BAZEL_VC
. בנוסף, אפשר להגדירBAZEL_VC_FULL_VERSION
.BAZEL_VC
ספריית ההתקנה של Visual C++ Build Toolsset BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC
BAZEL_VC_FULL_VERSION
(אופציונלי) רק ל-Visual Studio 2017 ו-2019, מספר הגרסה המלא של כלי ה-Visual C ++ של Build. אפשר לבחור את הגרסה המדויקת של C++ Tools Build דרךBAZEL_VC_FULL_VERSION
אם מתקינים יותר מגרסה אחת, אחרת Bazel תבחר את הגרסה האחרונה.set BAZEL_VC_FULL_VERSION=14.16.27023
ב-Visual Studio 2015 או בגרסה ישנה יותר, מגדירים את
BAZEL_VC
. (אין תמיכה בשדהBAZEL_VC_FULL_VERSION
.)BAZEL_VC
ספריית ההתקנה של Visual C++ Build Toolsset BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
-
ב-Windows SDK יש קובצי כותרת וספריות הדרושות בעת בניית אפליקציות של Windows, כולל Bazel עצמה. כברירת מחדל, ה-SDK האחרון של Windows יהיה בשימוש. אפשר גם לציין גרסה של Windows SDK על ידי הגדרת
BAZEL_WINSDK_FULL_VERSION
. ניתן להשתמש במספר מלא של Windows 10 SDK כגון 10.0.10240.0, או לציין 8.1 כדי להשתמש ב-Windows 8.1 SDK (רק גרסה אחת של Windows 8.1 SDK זמינה). ודאו שהתקנתם את Windows SDK שצוין.דרישה: התמיכה הזו זמינה במערכות VC 2017 ו-2019. כלי הפיתוח העצמאי 2015 Build לא תומך בבחירה של Windows SDK, אחרת ההתקנה של Studio Studio 2015 תהיה מלאה, אחרת המערכת תתעלם מ-
BAZEL_WINSDK_FULL_VERSION
.set BAZEL_WINSDK_FULL_VERSION=10.0.10240.0
אם הכול מוגדר, אפשר ליצור עכשיו יעד C++ !
נסו לבנות יעד מאחד מהפרויקטים לדוגמה שלנו:
bazel build //examples/cpp:hello-world
bazel-bin\examples\cpp\hello-world.exe
כברירת מחדל, הקבצים הבינאריים המובנים מטרגטים את ארכיטקטורת x64. כדי לציין ארכיטקטורת יעד אחרת, הגדירו את אפשרות ה-build של --cpu
בארכיטקטורת היעד:
* x64 (ברירת מחדל): --cpu=x64_windows
או אין אפשרות
* x86: --cpu=x64_x86_windows
* ARM: --cpu=x64_arm_windows
* ARM64: --cpu=arm64_windows
לדוגמה, כדי ליצור יעדים לארכיטקטורת ARM, מבצעים את הפעולות הבאות:
bazel build //examples/cpp:hello-world --cpu=x64_arm_windows
כדי ליצור ולהשתמש בספריות עם קישור דינמי (DLL), ניתן לעיין בדוגמה הזו.
מגבלת אורך שורת פקודה: כדי למנוע את הבעיה במגבלת שורת הפקודה של Windows, צריך להפעיל את תכונת הקובץ של פרמטר המהדר דרך --features=compiler_param_file
.
בניית C++ עם Clang
החל מ-0.29.0, Bazel תומכת בבניית עם מהדר MSVC תואם LLVM'clang-cl.exe
.
דרישה: כדי לבנות את האפליקציה עם Clang, עליכם להתקין את שני הכלים
LLVM ו-Visual C++ Build, כי למרות שאתם משתמשים ב-clang-cl.exe
בתור מהדר, עדיין תצטרכו לקשר לספריות +C++.
Bazel יכולה לזהות באופן אוטומטי את התקנת LLVM במערכת שלך, או לציין במפורש ש-Bazel מותקנת על ידי BAZEL_LLVM
.
BAZEL_LLVM
ספריית ההתקנה של LLVMset BAZEL_LLVM=C:\Program Files\LLVM
כדי להפעיל את כלי Clang לבניית C++, יש כמה מצבים.
ב-Bazel 0.28 או בגרסאות ישנות יותר: אין תמיכה ב-Clang.
ללא
--incompatible_enable_cc_toolchain_resolution
: ניתן להפעיל את ארגז הכלים של Clang על ידי סימון build--compiler=clang-cl
.עם
--incompatible_enable_cc_toolchain_resolution
: עליך להוסיף יעד פלטפורמה ל-BUILD file
(למשל, הקובץBUILD
ברמה העליונה):platform( name = "x64_windows-clang-cl", constraint_values = [ "@platforms//cpu:x86_64", "@platforms//os:windows", "@bazel_tools//tools/cpp:clang-cl", ], )
לאחר מכן תוכלו להפעיל את ארגז הכלים של Clang באחת משתי הדרכים הבאות:
- יש לציין את דגלי ה-build הבאים:
--extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows-clang-cl --extra_execution_platforms=//:x64_windows-clang-cl
- רישום הפלטפורמה וארגז הכלים בקובץ
WORKSPACE
:
register_execution_platforms( ":x64_windows-clang-cl" ) register_toolchains( "@local_config_cc//:cc-toolchain-x64_windows-clang-cl", )
הסימון --incompatible_activate_cc_toolchain_resolution מתוכנן לפעול כברירת מחדל בגרסה החדשה של Bazel. לכן מומלץ להפעיל את התמיכה של Clang בגישה השנייה.
בניית Java
כדי ליצור יעדים ב-Java:
ב-Windows, Bazel בונה שני קובצי פלט עבור כללים של java_binary
:
- קובץ
.jar
- קובץ
.exe
שיכול להגדיר את הסביבה עבור ה-JVM ולהפעיל את הקובץ הבינארי
נסו לבנות יעד מאחד מהפרויקטים לדוגמה שלנו:
bazel build //examples/java-native/src/main/java/com/example/myproject:hello-world
bazel-bin\examples\java-native\src\main\java\com\example\myproject\hello-world.exe
Build Python
כדי ליצור יעדים ב-Python:
ב-Windows, Bazel בונה שני קובצי פלט עבור כללים של py_binary
:
- קובץ ZIP שמבצע הוצאה עצמית
- קובץ הפעלה שיכול להפעיל את המתרגם ב-Python עם קובץ ה-zip לחילוץ עצמי כארגומנט
אפשר להריץ את קובץ ההפעלה (עם סיומת .exe
) או להפעיל את Python עם קובץ ה-zip לחילוץ עצמי כארגומנט.
נסו לבנות יעד מאחד מהפרויקטים לדוגמה שלנו:
bazel build //examples/py_native:bin
bazel-bin\examples\py_native\bin.exe
python bazel-bin\examples\py_native\bin.zip
אם אתם רוצים לקבל פרטים על האופן שבו Bazel יוצרת מיקודים ב-Python ב-Windows, מומלץ לעיין במסמך העיצוב הזה.