این صفحه بهترین روش ها برای استفاده از Bazel در ویندوز را پوشش می دهد. برای دستورالعملهای نصب، به نصب Bazel در ویندوز مراجعه کنید.
مشکلات شناخته شده
مشکلات Bazel مربوط به ویندوز با برچسب "team-Windows" در GitHub مشخص شده اند. می توانید مسائل باز را اینجا ببینید.
بهترین شیوه ها
از مسائل مسیر طولانی اجتناب کنید
برخی از ابزارها دارای محدودیت حداکثر طول مسیر در ویندوز هستند، از جمله کامپایلر MSVC. برای جلوگیری از برخورد با این مشکل، می توانید یک فهرست خروجی کوتاه برای Bazel با پرچم --output_user_root مشخص کنید.
به عنوان مثال، خط زیر را به فایل bazelrc خود اضافه کنید:
startup --output_user_root=C:/tmp
پشتیبانی از نام فایل 8.3 را فعال کنید
Bazel سعی می کند یک نسخه با نام کوتاه برای مسیرهای فایل طولانی ایجاد کند. اما برای انجام این کار، پشتیبانی از نام فایل 8.3 باید برای حجمی که فایل با مسیر طولانی در آن قرار دارد، فعال شود. با اجرای دستور زیر می توانید ایجاد نام 8.3 را در تمام حجم ها فعال کنید:
fsutil 8dot3name set 0
پشتیبانی از Symlink را فعال کنید
برخی از ویژگیها به Bazel نیاز دارند که بتواند پیوندهای سمبل فایل را در ویندوز ایجاد کند، یا با فعال کردن Developer Mode (در ویندوز 10 نسخه 1703 یا جدیدتر)، یا با اجرای Bazel به عنوان یک سرپرست. این ویژگی های زیر را فعال می کند:
برای سهولت کار، خطوط زیر را به فایل bazelrc خود اضافه کنید:
startup --windows_enable_symlinks
build --enable_runfiles
توجه : ایجاد پیوندهای نمادین در ویندوز یک عملیات گران است. پرچم --enable_runfiles
به طور بالقوه می تواند تعداد زیادی پیوند سمبل فایل ایجاد کند. فقط زمانی که به آن نیاز دارید این ویژگی را فعال کنید.
اجرای Bazel: پوسته MSYS2 در مقابل خط فرمان در مقابل PowerShell
توصیه: Bazel را از خط فرمان ( cmd.exe
) یا از PowerShell اجرا کنید.
از 15/01/2020، Bazel را از bash
اجرا نکنید - از پوسته MSYS2، یا Git Bash، یا Cygwin، یا هر گونه دیگر Bash. در حالی که Bazel ممکن است برای بیشتر موارد استفاده کار کند، برخی چیزها خراب هستند، مانند قطع کردن ساخت با Ctrl+C از MSYS2 ). همچنین، اگر انتخاب کنید که تحت MSYS2 اجرا شود، باید تبدیل مسیر خودکار MSYS2 را غیرفعال کنید، در غیر این صورت MSYS آرگومان های خط فرمان را که شبیه مسیرهای یونیکس هستند (مانند //foo:bar
) به مسیرهای ویندوز تبدیل می کند. برای جزئیات بیشتر به این پاسخ StackOverflow مراجعه کنید.
استفاده از Bazel بدون Bash (MSYS2)
استفاده از ساخت بازل بدون Bash
نسخههای Bazel قبل از 1.0 به Bash برای ایجاد برخی قوانین نیاز داشتند.
با شروع Bazel 1.0، میتوانید هر قاعدهای را بدون Bash بسازید، مگر اینکه یک قانون زیر باشد:
-
genrule
، زیرا ژانرها دستورات Bash را اجرا می کنند - قانون
sh_binary
یاsh_test
، زیرا اینها ذاتاً به Bash نیاز دارند - قانون Starlark که از
ctx.actions.run_shell()
یاctx.resolve_command()
استفاده می کند
با این حال، genrule
اغلب برای کارهای ساده مانند کپی کردن یک فایل یا نوشتن یک فایل متنی استفاده می شود . به جای استفاده از genrule
(و بسته به Bash) ممکن است یک قانون مناسب در مخزن bazel-skylib پیدا کنید . وقتی این قوانین بر روی ویندوز ساخته می شوند، نیازی به Bash ندارند .
استفاده از تست بازل بدون Bash
نسخههای Bazel قبل از 1.0 به Bash نیاز داشتند تا هر چیزی bazel test
کند.
با شروع Bazel 1.0، میتوانید هر قاعدهای را بدون Bash آزمایش کنید، مگر اینکه:
- شما از
--run_under
استفاده می کنید - خود قانون تست به Bash نیاز دارد (زیرا فایل اجرایی آن یک اسکریپت پوسته است)
استفاده از bazel run بدون Bash
نسخههای Bazel قبل از 1.0 به Bash نیاز داشتند تا هر چیزی bazel run
کند.
با شروع Bazel 1.0، می توانید هر قانونی را بدون Bash اجرا کنید، به جز موارد:
- شما از
--run_under
یا--script_path
استفاده می کنید - خود قانون تست به Bash نیاز دارد (زیرا فایل اجرایی آن یک اسکریپت پوسته است)
استفاده از قوانین دودویی sh و sh * و ctx.actions.run_shell() بدون Bash
برای ساختن و آزمایش قوانین sh_*
و برای ساخت و آزمایش قوانین Starlark که از ctx.actions.run_shell()
و ctx.resolve_command()
استفاده می کنند، به Bash نیاز دارید. این نه تنها در مورد قوانین پروژه شما اعمال می شود، بلکه در مورد قوانین موجود در هر یک از مخازن خارجی پروژه شما (حتی به صورت گذرا) به آن بستگی دارد.
در آینده، ممکن است گزینه ای برای استفاده از Windows Subsystem for Linux (WSL) برای ایجاد این قوانین وجود داشته باشد، اما در حال حاضر این گزینه برای زیرتیم Bazel-on-Windows در اولویت نیست.
تنظیم متغیرهای محیطی
متغیرهای محیطی که در خط فرمان ویندوز ( cmd.exe
) تنظیم می کنید فقط در آن جلسه خط فرمان تنظیم می شوند. اگر یک cmd.exe
جدید راه اندازی می کنید، باید دوباره متغیرها را تنظیم کنید. برای اینکه همیشه متغیرها را هنگام شروع cmd.exe
تنظیم کنید، می توانید آنها را به متغیرهای کاربر یا متغیرهای سیستم در کادر گفتگوی Control Panel > System Properties > Advanced > Environment Variables...
اضافه کنید.
بر روی ویندوز بسازید
ساخت ++C با MSVC
برای ساخت اهداف C++ با MSVC، شما نیاز دارید:
(اختیاری) متغیر محیطی
BAZEL_VC
وBAZEL_VC_FULL_VERSION
.Bazel به طور خودکار کامپایلر Visual 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 Tools شما. اگر بیش از یک نسخه نصب شده باشد، میتوانید نسخه دقیق Visual C++ Build Tools را از طریق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 حاوی فایلهای هدر و کتابخانههایی است که هنگام ساخت برنامههای ویندوز، از جمله خود Bazel، به آنها نیاز دارید. به طور پیش فرض، آخرین SDK ویندوز نصب شده استفاده خواهد شد. همچنین می توانید نسخه SDK ویندوز را با تنظیم
BAZEL_WINSDK_FULL_VERSION
مشخص کنید. می توانید از یک شماره SDK کامل ویندوز 10 مانند 10.0.10240.0 استفاده کنید، یا 8.1 را برای استفاده از Windows 8.1 SDK تعیین کنید (فقط یک نسخه از Windows 8.1 SDK موجود است). لطفاً مطمئن شوید که Windows SDK مشخص شده را نصب کرده اید.مورد نیاز : این با VC 2017 و 2019 پشتیبانی میشود. ابزار مستقل ساخت VC 2015 از انتخاب Windows SDK پشتیبانی نمیکند، شما به نصب کامل Visual 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 را هدف قرار می دهند. برای تعیین معماری هدف متفاوت، گزینه ساخت --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)، این مثال را ببینید.
محدودیت طول خط فرمان : برای جلوگیری از مشکل محدودیت طول خط فرمان ویندوز ، ویژگی فایل پارامتر کامپایلر را از طریق --features=compiler_param_file
فعال کنید.
C++ را با Clang بسازید
از 0.29.0، Bazel از ساخت با درایور کامپایلر سازگار با MSVC LLVM ( clang-cl.exe
) پشتیبانی می کند.
مورد نیاز : برای ساخت با Clang، باید هر دو ابزار ساخت LLVM و Visual C++ را نصب کنید، زیرا اگرچه از clang-cl.exe
به عنوان کامپایلر استفاده می کنید، هنوز باید به کتابخانه های Visual C++ پیوند دهید.
Bazel می تواند به طور خودکار نصب LLVM را در سیستم شما تشخیص دهد، یا می توانید به صراحت به Bazel بگویید LLVM توسط BAZEL_LLVM
کجا نصب شده است.
BAZEL_LLVM
دایرکتوری نصب LLVMset BAZEL_LLVM=C:\Program Files\LLVM
برای فعال کردن زنجیره ابزار Clang برای ساختن ++C، چندین موقعیت وجود دارد.
در bazel 0.28 و بالاتر: Clang پشتیبانی نمی شود.
بدون
--incompatible_enable_cc_toolchain_resolution
: می توانید زنجیره ابزار Clang را با یک پرچم ساخت--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 را با یکی از دو روش زیر فعال کنید:
- پرچم های ساخت زیر را مشخص کنید:
--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_enable_cc_toolchain_resolution برنامه ریزی شده است که به طور پیش فرض در نسخه آینده Bazel فعال شود. بنابراین، توصیه می شود پشتیبانی Clang را با رویکرد دوم فعال کنید.
جاوا بسازید
برای ساخت اهداف جاوا، شما نیاز دارید:
در ویندوز، 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
پایتون بسازید
برای ساخت اهداف پایتون، شما نیاز دارید:
در ویندوز، Bazel دو فایل خروجی برای قوانین py_binary
:
- یک فایل فشرده خود استخراج
- یک فایل اجرایی که می تواند مفسر پایتون را با فایل فشرده خود استخراج شونده به عنوان آرگومان راه اندازی کند.
شما می توانید فایل اجرایی را اجرا کنید (این فایل دارای پسوند .exe
. است) یا می توانید پایتون را با فایل فشرده خود استخراج شده به عنوان آرگومان اجرا کنید.
سعی کنید از یکی از پروژه های نمونه ما یک هدف بسازید:
bazel build //examples/py_native:bin
bazel-bin\examples\py_native\bin.exe
python bazel-bin\examples\py_native\bin.zip
اگر به جزئیاتی در مورد نحوه ساخت اهداف پایتون روی ویندوز توسط Bazel علاقه مند هستید، این سند طراحی را بررسی کنید.