উইন্ডোজে ব্যাজেল ব্যবহার করা

এই পৃষ্ঠাটি 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++ টার্গেট তৈরি করতে আপনার প্রয়োজন:

  • ভিজ্যুয়াল 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

আপনি যদি উইন্ডোজে বেজেল পাইথন লক্ষ্যগুলি কীভাবে তৈরি করে সে সম্পর্কে বিশদ জানতে আগ্রহী হন তবে এই নকশা ডকটি দেখুন।