এই পৃষ্ঠাটি Windows এ Bazel ব্যবহার করার জন্য সর্বোত্তম অনুশীলনগুলি কভার করে৷ ইনস্টলেশন নির্দেশাবলীর জন্য, উইন্ডোজে ব্যাজেল ইনস্টল করুন দেখুন।
জ্ঞাত সমস্যা
উইন্ডোজ-সম্পর্কিত ব্যাজেল সমস্যাগুলি GitHub-এ "টিম-উইন্ডোজ" লেবেল দিয়ে চিহ্নিত করা হয়েছে। আপনি এখানে খোলা সমস্যা দেখতে পারেন.
সেরা অনুশীলন
দীর্ঘ পথ সমস্যা এড়িয়ে চলুন
কিছু টুলের MSVC কম্পাইলার সহ Windows এ সর্বাধিক পাথ দৈর্ঘ্যের সীমাবদ্ধতা রয়েছে। এই সমস্যাটি এড়াতে, আপনি --output_user_root পতাকা দ্বারা Bazel-এর জন্য একটি ছোট আউটপুট ডিরেক্টরি নির্দিষ্ট করতে পারেন।
উদাহরণস্বরূপ, আপনার bazelrc ফাইলে নিম্নলিখিত লাইন যোগ করুন:
startup --output_user_root=C:/tmp
8.3 ফাইলের নাম সমর্থন সক্ষম করুন
ব্যাজেল দীর্ঘ ফাইল পাথের জন্য একটি ছোট নামের সংস্করণ তৈরি করার চেষ্টা করে। কিন্তু এটি করার জন্য 8.3 ফাইলের নাম সমর্থন সক্রিয় করা প্রয়োজন যে ভলিউমে দীর্ঘ পথের ফাইলটি থাকে। আপনি নিম্নলিখিত কমান্ডটি চালিয়ে সমস্ত ভলিউমে 8.3 নাম তৈরি সক্ষম করতে পারেন:
fsutil 8dot3name set 0
সিমলিংক সমর্থন সক্ষম করুন
কিছু বৈশিষ্ট্যের জন্য Bazelকে Windows এ ফাইল সিমলিঙ্ক তৈরি করতে সক্ষম হতে হবে, হয় ডেভেলপার মোড সক্ষম করে (Windows 10 সংস্করণ 1703 বা তার চেয়ে নতুন) বা প্রশাসক হিসাবে Bazel চালানোর মাধ্যমে। এটি নিম্নলিখিত বৈশিষ্ট্যগুলিকে সক্ষম করে:
এটি সহজ করার জন্য, আপনার bazelrc ফাইলে নিম্নলিখিত লাইন যোগ করুন:
startup --windows_enable_symlinks
build --enable_runfiles
দ্রষ্টব্য : উইন্ডোজে সিমলিঙ্ক তৈরি করা একটি ব্যয়বহুল অপারেশন। --enable_runfiles
পতাকা সম্ভাব্যভাবে প্রচুর পরিমাণে ফাইল সিমলিংক তৈরি করতে পারে। আপনার প্রয়োজন হলেই শুধুমাত্র এই বৈশিষ্ট্যটি সক্ষম করুন৷
রানিং ব্যাজেল: MSYS2 শেল বনাম কমান্ড প্রম্পট বনাম পাওয়ারশেল
প্রস্তাবনা: কমান্ড প্রম্পট ( cmd.exe
) বা PowerShell থেকে Bazel চালান।
2020-01-15 পর্যন্ত, bash
থেকে Bazel চালাবেন না -- হয় MSYS2 শেল, বা Git Bash, বা Cygwin, বা অন্য কোনো Bash ভেরিয়েন্ট থেকে। যদিও Bazel বেশিরভাগ ব্যবহারের ক্ষেত্রে কাজ করতে পারে, কিছু জিনিস ভেঙে গেছে, যেমন MSYS2 থেকে Ctrl+C দিয়ে বিল্ডে বাধা দেওয়া )। এছাড়াও, আপনি যদি MSYS2 এর অধীনে চালানোর জন্য বেছে নেন, তাহলে আপনাকে MSYS2 এর স্বয়ংক্রিয় পাথ রূপান্তর নিষ্ক্রিয় করতে হবে, অন্যথায় MSYS কমান্ড লাইন আর্গুমেন্টগুলিকে রূপান্তর করবে যা ইউনিক্স পাথের মত দেখায় (যেমন //foo:bar
) উইন্ডোজ পাথে। বিস্তারিত জানার জন্য এই StackOverflow উত্তর দেখুন।
ব্যাশ ছাড়া বেজেল ব্যবহার করা (MSYS2)
ব্যাশ ছাড়া বেজেল বিল্ড ব্যবহার করা
1.0 এর আগে Bazel সংস্করণে কিছু নিয়ম তৈরি করতে Bash এর প্রয়োজন হতো।
Bazel 1.0 দিয়ে শুরু করে, আপনি Bash ছাড়া যেকোনো নিয়ম তৈরি করতে পারেন যদি না এটি হয়:
-
genrule
, কারণ genrule ব্যাশ কমান্ড চালায় -
sh_binary
বাsh_test
নিয়ম, কারণ এগুলোর স্বাভাবিকভাবেই Bash প্রয়োজন - Starlark নিয়ম যা
ctx.actions.run_shell()
বাctx.resolve_command()
ব্যবহার করে
যাইহোক, genrule
প্রায়ই একটি ফাইল অনুলিপি করা বা একটি টেক্সট ফাইল লেখার মতো সাধারণ কাজের জন্য ব্যবহৃত হয়। genrule
ব্যবহার করার পরিবর্তে (এবং Bash এর উপর নির্ভর করে) আপনি bazel-skylib সংগ্রহস্থলে একটি উপযুক্ত নিয়ম খুঁজে পেতে পারেন। উইন্ডোজে নির্মিত হলে, এই নিয়মগুলির জন্য Bash প্রয়োজন হয় না ।
ব্যাশ ছাড়া বেজেল পরীক্ষা ব্যবহার করা
1.0-এর আগে Bazel সংস্করণে bazel test
করার জন্য।
Bazel 1.0 দিয়ে শুরু করে, আপনি Bash ছাড়া যেকোনো নিয়ম পরীক্ষা করতে পারেন, যখন:
- আপনি
--run_under
ব্যবহার করেন - পরীক্ষার নিয়ম নিজেই ব্যাশ প্রয়োজন (কারণ এটির এক্সিকিউটেবল একটি শেল স্ক্রিপ্ট)
Bash ছাড়া bazel রান ব্যবহার করে
1.0-এর আগে Bazel সংস্করণে bazel run
প্রয়োজন হত।
Bazel 1.0 দিয়ে শুরু করে, আপনি Bash ছাড়া যেকোনো নিয়ম চালাতে পারবেন, যখন:
- আপনি
--run_under
বা--script_path
ব্যবহার করেন - পরীক্ষার নিয়ম নিজেই ব্যাশ প্রয়োজন (কারণ এটির এক্সিকিউটেবল একটি শেল স্ক্রিপ্ট)
ব্যাশ ছাড়া sh বাইনারি এবং sh * নিয়ম এবং ctx.actions.run_shell() ব্যবহার করা
sh_*
নিয়মগুলি তৈরি করতে এবং পরীক্ষা করতে এবং ctx.actions.run_shell()
এবং ctx.resolve_command()
) ব্যবহার করে এমন Starlark নিয়মগুলি তৈরি করতে এবং পরীক্ষা করতে আপনার Bash প্রয়োজন। এটি শুধুমাত্র আপনার প্রজেক্টের নিয়মের ক্ষেত্রেই প্রযোজ্য নয়, আপনার প্রোজেক্টের উপর নির্ভর করে (এমনকি ট্রানজিটিভলি) যেকোন বাহ্যিক ভান্ডারের নিয়মের ক্ষেত্রেও।
ভবিষ্যতে, এই নিয়মগুলি তৈরি করতে Linux (WSL) এর জন্য Windows সাবসিস্টেম ব্যবহার করার বিকল্প থাকতে পারে, কিন্তু বর্তমানে এটি Bazel-on-Windows সাবটিমের জন্য অগ্রাধিকার নয়।
পরিবেশের ভেরিয়েবল সেট করা
আপনি উইন্ডোজ কমান্ড প্রম্পটে ( cmd.exe
) সেট করা পরিবেশের ভেরিয়েবলগুলি শুধুমাত্র সেই কমান্ড প্রম্পট সেশনে সেট করা হয়। আপনি যদি একটি নতুন cmd.exe
শুরু করেন, তাহলে আপনাকে আবার ভেরিয়েবল সেট করতে হবে। cmd.exe
শুরু হলে সর্বদা ভেরিয়েবল সেট করতে, আপনি Control Panel > System Properties > Advanced > Environment Variables...
ডায়ালগ বক্সে ব্যবহারকারী ভেরিয়েবল বা সিস্টেম ভেরিয়েবলে যোগ করতে পারেন।
উইন্ডোজে তৈরি করুন
MSVC দিয়ে C++ তৈরি করুন
MSVC এর সাথে C++ টার্গেট তৈরি করতে আপনার প্রয়োজন:
(ঐচ্ছিক)
BAZEL_VC
এবংBAZEL_VC_FULL_VERSION
পরিবেশ পরিবর্তনশীল।Bazel স্বয়ংক্রিয়ভাবে আপনার সিস্টেমে ভিজ্যুয়াল C++ কম্পাইলার সনাক্ত করে। Bazel কে একটি নির্দিষ্ট VC ইনস্টলেশন ব্যবহার করতে বলতে, আপনি নিম্নলিখিত পরিবেশ ভেরিয়েবল সেট করতে পারেন:
ভিজ্যুয়াল স্টুডিও 2017 এবং 2019-এর জন্য
BAZEL_VC
এর একটি সেট করুন। উপরন্তু আপনিBAZEL_VC_FULL_VERSION
সেট করতে পারেন।BAZEL_VC
ভিজ্যুয়াল C++ বিল্ড টুল ইনস্টলেশন ডিরেক্টরিset BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC
BAZEL_VC_FULL_VERSION
(ঐচ্ছিক) শুধুমাত্র ভিজ্যুয়াল স্টুডিও 2017 এবং 2019 এর জন্য, আপনার ভিজ্যুয়াল C++ বিল্ড টুলের সম্পূর্ণ সংস্করণ নম্বর। যদি একাধিক সংস্করণ ইনস্টল করা থাকে তবে আপনিBAZEL_VC_FULL_VERSION
এর মাধ্যমে সঠিক ভিজ্যুয়াল C++ বিল্ড টুল সংস্করণ চয়ন করতে পারেন, অন্যথায় Bazel সর্বশেষ সংস্করণটি বেছে নেবে।set BAZEL_VC_FULL_VERSION=14.16.27023
ভিজ্যুয়াল স্টুডিও 2015 বা তার বেশির জন্য,
BAZEL_VC
সেট করুন। (BAZEL_VC_FULL_VERSION
সমর্থিত নয়৷)BAZEL_VC
ভিজ্যুয়াল C++ বিল্ড টুল ইনস্টলেশন ডিরেক্টরিset BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
Windows SDK-এ হেডার ফাইল এবং লাইব্রেরি রয়েছে যা Windows অ্যাপ্লিকেশন তৈরি করার সময় আপনার প্রয়োজন, যার মধ্যে Bazel নিজেই রয়েছে। ডিফল্টরূপে, ইনস্টল করা সর্বশেষ Windows SDK ব্যবহার করা হবে৷ আপনি
BAZEL_WINSDK_FULL_VERSION
সেট করে Windows SDK সংস্করণও নির্দিষ্ট করতে পারেন। আপনি একটি সম্পূর্ণ Windows 10 SDK নম্বর ব্যবহার করতে পারেন যেমন 10.0.10240.0, অথবা Windows 8.1 SDK ব্যবহার করার জন্য 8.1 নির্দিষ্ট করুন (Windows 8.1 SDK-এর শুধুমাত্র একটি সংস্করণ উপলব্ধ)৷ অনুগ্রহ করে নিশ্চিত করুন যে আপনি নির্দিষ্ট Windows SDK ইনস্টল করেছেন।প্রয়োজনীয়তা : এটি VC 2017 এবং 2019 এর সাথে সমর্থিত। স্বতন্ত্র ভিসি 2015 বিল্ড টুল Windows SDK নির্বাচন করা সমর্থন করে না, আপনার সম্পূর্ণ ভিজ্যুয়াল স্টুডিও 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
উদাহরণস্বরূপ, এআরএম আর্কিটেকচারের লক্ষ্যগুলি তৈরি করতে, চালান:
bazel build //examples/cpp:hello-world --cpu=x64_arm_windows
ডায়নামিকলি লিঙ্কড লাইব্রেরি (DLL ফাইল) তৈরি এবং ব্যবহার করতে, এই উদাহরণটি দেখুন।
কমান্ড লাইনের দৈর্ঘ্যের সীমা : উইন্ডোজ কমান্ড লাইনের দৈর্ঘ্যের সীমা সমস্যা প্রতিরোধ করতে, --features=compiler_param_file
এর মাধ্যমে কম্পাইলার প্যারামিটার ফাইল বৈশিষ্ট্যটি সক্ষম করুন।
Clang দিয়ে C++ তৈরি করুন
0.29.0 থেকে, Bazel LLVM-এর MSVC-সামঞ্জস্যপূর্ণ কম্পাইলার ড্রাইভার ( clang-cl.exe
) সহ বিল্ডিং সমর্থন করে।
প্রয়োজনীয়তা : ক্ল্যাং দিয়ে তৈরি করার জন্য, আপনাকে LLVM এবং ভিজ্যুয়াল C++ বিল্ড টুল ইন্সটল করতে হবে, কারণ যদিও আপনি কম্পাইলার হিসেবে clang-cl.exe
ব্যবহার করেন, তবুও আপনাকে ভিজ্যুয়াল C++ লাইব্রেরির সাথে লিঙ্ক করতে হবে।
Bazel স্বয়ংক্রিয়ভাবে আপনার সিস্টেমে LLVM ইনস্টলেশন সনাক্ত করতে পারে, অথবা আপনি স্পষ্টভাবে Bazel কে বলতে পারেন যেখানে BAZEL_LLVM দ্বারা BAZEL_LLVM
ইনস্টল করা হয়েছে।
BAZEL_LLVM
ইনস্টলেশন ডিরেক্টরিset BAZEL_LLVM=C:\Program Files\LLVM
C++ নির্মাণের জন্য ক্ল্যাং টুলচেন সক্ষম করতে, বিভিন্ন পরিস্থিতিতে রয়েছে।
Bazel 0.28 এবং তার বেশি বয়সে: Clang সমর্থিত নয়।
--incompatible_enable_cc_toolchain_resolution
ছাড়া : আপনি একটি বিল্ড ফ্ল্যাগ--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", ], )
তারপরে আপনি নিম্নলিখিত দুটি উপায়ে ক্ল্যাং টুলচেইন সক্ষম করতে পারেন:
- নিম্নলিখিত বিল্ড পতাকা নির্দিষ্ট করুন:
--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 রিলিজে ডিফল্টরূপে সক্রিয় করার পরিকল্পনা করা হয়েছে। অতএব, দ্বিতীয় পদ্ধতির সাথে ক্ল্যাং সমর্থন সক্ষম করার সুপারিশ করা হয়।
জাভা তৈরি করুন
জাভা লক্ষ্যগুলি তৈরি করতে আপনার প্রয়োজন:
উইন্ডোজে, 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
আপনি যদি উইন্ডোজে বেজেল পাইথন লক্ষ্যগুলি কীভাবে তৈরি করে সে সম্পর্কে বিশদ জানতে আগ্রহী হন তবে এই নকশা ডকটি দেখুন।