استخدام Bazel على نظام التشغيل Windows

تتناول هذه الصفحة أفضل الممارسات لاستخدام Bazel على نظام التشغيل Windows. للحصول على تعليمات حول التثبيت، يُرجى الاطِّلاع على تثبيت Bazel على نظام التشغيل Windows.

المشاكل المعروفة

يتم تصنيف مشاكل Bazel المرتبطة بنظام التشغيل Windows باستخدام التصنيف "team;team-Windows" على GitHub. يمكنك الاطّلاع على المشاكل المفتوحة هنا.

أفضل الممارسات

تجنُّب مشاكل المسار الطويل

تحتوي بعض الأدوات على الحد الأقصى لطول المسار على نظام التشغيل Windows، بما في ذلك برنامج التجميع MSVC. لتجنّب حدوث هذه المشكلة، يمكنك تحديد دليل مخرجات قصيرة لتطبيق Bazel من خلال العلامة --output_user_root.

على سبيل المثال، أضف السطر التالي إلى ملف bazelrc:

startup --output_user_root=C:/tmp

تفعيل دعم اسم الملف 8.3

يحاول Bazel إنشاء نسخة من اسم مختصر لمسارات الملفات الطويلة. ولإجراء ذلك، يجب تفعيل دعم اسم الملف 8.3 لمستوى الصوت الذي يتوفّر فيه الملف بالمسار الطويل. يمكنك تفعيل ميزة إنشاء الاسم 8.3 في كل المجلدات من خلال تنفيذ الأمر التالي:

fsutil 8dot3name set 0

تتطلب بعض الميزات من Bazel إنشاء روابط الملفات على نظام التشغيل Windows، إما من خلال تفعيل وضع مطوّر البرامج (على الإصدار 1703 من نظام التشغيل Windows 10 أو الإصدارات الأحدث) أو من خلال تشغيل Bazel كمشرف. يؤدي هذا إلى تفعيل الميزات التالية:

لتسهيل هذه العملية، أضف الأسطر التالية إلى ملف Bazelrc:

startup --windows_enable_symlinks
build --enable_runfiles

ملاحظة: يُعدّ إنشاء روابط رمزية على نظام التشغيل Windows عملية مكلفة. يمكن أن تؤدي العلامة --enable_runfiles إلى إنشاء عدد كبير من الروابط الرمزية للملفات. عليك تفعيل هذه الميزة عند الحاجة فقط.

تشغيل Bazel: MSYS2 Shell toتوجّه الأوامر في مقابل PowerShell

الاقتراح: شغِّل Bazel من موجِّه الأوامر (cmd.exe) أو من PowerShell.

اعتبارًا من 15-01-2020، لا تشغِّل Bazel من bash، إما من MSYS2 Shell أو Git Bash أو Cygwin أو أي صيغة أخرى Bash. على الرغم من أن Bazel يمكن أن يعمل في معظم حالات الاستخدام، إلا أن بعض الأمور معطّلة، مثل تقاطع الإصدار باستخدام Ctrl+C من MSYS2. أيضًا، إذا اخترت التشغيل ضمن MSYS2، عليك إيقاف تحويل المسار التلقائي MSYS2'OTHER، ستحوّل MSYS وسيطات سطر الأوامر التي تبدو مثل مسارات Unix (مثل //foo:bar) إلى مسارات Windows. يمكنك الاطّلاع على هذه الإجابة على StackOverflow للحصول على التفاصيل.

استخدام Bazel بدون Bash (MSYS2)

استخدام باقة البازيل بدون صوت الباش

كانت إصدارات Bazel قبل الإصدار 1.0 تتطلّب من Bash لإنشاء بعض القواعد.

بدءًا من Bazel 1.0، يمكنك إنشاء أي قاعدة بدون Bash ما لم تكن:

  • genrule، لأنّ قواعد genRule تنفّذ أوامر Bash
  • قاعدة sh_binary أو sh_test، لأنّ هذه القواعد تحتاج بطبيعتها إلى Bash
  • قاعدة Starlark التي تستخدم ctx.actions.run_shell() أو ctx.resolve_command()

وغالبًا ما يتم استخدام genrule لإجراء مهام بسيطة، مثل نسخ ملف أو كتابة ملف نصي. بدلاً من استخدام genrule (واعتمادًا على Bash) قد تجد قاعدة مناسبة في مستودع Bazel-skylib. عند إنشاء هذه القواعد على نظام التشغيل Windows، لا تتطلب هذه القواعد استخدام Bash.

استخدام اختبار البازلاء بدون صوت الباش

كانت إصدارات Bazel قبل الإصدار 1.0 تتطلّب من Bash إلى bazel test.

بدءًا من Bazel 1.0، يمكنك اختبار أي قاعدة بدون Bash، إلا في الحالات التالية:

  • أنت تستخدم --run_under
  • تتطلب قاعدة الاختبار نفسها Bash (لأنها قابلة للتنفيذ عبارة عن نص برمجي الأوامر)

استخدام خبز البازلال بدون صوت الباش

كانت إصدارات Bazel قبل الإصدار 1.0 تتطلّب من Bash إلى bazel run.

بدءًا من Bazel 1.0، يمكنك تنفيذ أي قاعدة بدون Bash، إلا في الحالات التالية:

  • يتم استخدام --run_under أو --script_path.
  • تتطلب قاعدة الاختبار نفسها Bash (لأنها قابلة للتنفيذ عبارة عن نص برمجي الأوامر)

استخدام قاعدتَي shثنائية وsh* و .ctx.actions.run_shell() بدون Bash

أنت بحاجة إلى Bash لإنشاء قواعد sh_* واختبارها وكذلك لإنشاء قواعد Starstark التي تستخدم ctx.actions.run_shell() وctx.resolve_command() واختبارها. لا ينطبق هذا الإجراء على القواعد المتاحة في مشروعك وحسب، بل ينطبق على القواعد المتاحة في أي مستودع خارجي يعتمد على مشروعك (حتى وإن كان بشكل مؤقت).

في المستقبل، قد يكون هناك خيار لاستخدام نظام Windows الفرعي لنظام التشغيل Linux (WSL) لإنشاء هذه القواعد، ولكن حاليًا لا تكون من أولوية الفريق الفرعي على Bazel-on-Windows.

إعداد متغيّرات البيئة

لا يتم ضبط متغيّرات البيئة التي تحدّدها في موجِّه الأوامر على نظام التشغيل Windows (cmd.exe) إلا في جلسة موجِّه الأوامر هذه. إذا بدأت cmd.exe جديدًا، عليك ضبط المتغيرات مرة أخرى. لضبط المتغيّرات دائمًا عند بدء cmd.exe، يمكنك إضافتها إلى متغيّرات المستخدم أو متغيّرات النظام في مربّع الحوار Control Panel > System Properties > Advanced > Environment Variables....

تطوير البرامج على نظام التشغيل Windows

إنشاء C++ باستخدام MSVC

لإنشاء أهداف C++ باستخدام MSVC، ستحتاج إلى:

  • المجمِّع المرئي C++ .

  • (اختياري) متغير البيئة BAZEL_VC وBAZEL_VC_FULL_VERSION.

    يرصد Bazel تلقائيًا العارض C++ المرئي على نظامك. لإبلاغ Bazel باستخدام تثبيت اجتماع فيديو محدد، يمكنك ضبط متغيّرات البيئة التالية:

    بالنسبة إلى Visual Studio 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 من Visual Studio، يتم عرض الإصدار الكامل من أدوات إنشاء Visual C++. يمكنك اختيار الإصدار الدقيق من أداة C++ لإنشاء المحتوى باستخدام BAZEL_VC_FULL_VERSION في حال تثبيت أكثر من إصدار واحد، وإلا سيختار Bazel أحدث إصدار.

      set BAZEL_VC_FULL_VERSION=14.16.27023
      

    بالنسبة إلى Visual Studio 2015 أو الإصدارات الأقدم، عليك ضبط BAZEL_VC. (BAZEL_VC_FULL_VERSION غير متوافق.)

    • BAZEL_VC دليل تثبيت أدوات التصميم المرئي C++

      set BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
      
  • حزمة تطوير البرامج (SDK) لنظام التشغيل Windows.

    تحتوي حزمة تطوير البرامج (SDK) لنظام التشغيل Windows على ملفات العناوين والمكتبات التي تحتاج إليها عند إنشاء تطبيقات Windows، بما في ذلك Bazel نفسها. سيتم تلقائيًا استخدام أحدث إصدار من حزمة تطوير البرامج (SDK) لنظام التشغيل Windows. يمكنك أيضًا تحديد إصدار حزمة تطوير البرامج (SDK) لنظام التشغيل Windows من خلال ضبط BAZEL_WINSDK_FULL_VERSION. يمكنك استخدام رقم كامل من حزمة تطوير البرامج (SDK) لنظام التشغيل Windows 10، مثل 10.0.10240.0، أو تحديد 8.1 لاستخدام حزمة تطوير البرامج (SDK) لنظام التشغيل Windows 8.1 (يتوفّر إصدار واحد فقط من حزمة تطوير البرامج (SDK) لنظام التشغيل Windows 8.1). يُرجى التأكّد من تثبيت حزمة تطوير البرامج (SDK) لنظام التشغيل Windows المحدّدة.

    المتطلبات: تتوافق هذه الميزة مع الإصدارات 2017 و2019 من اجتماع الفيديو. لا تتوافق أدوات الإصدار VC 2015 المستقلة مع اختيار حزمة تطوير البرامج (SDK) لنظام التشغيل Windows، ستحتاج إلى تثبيت 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) واستخدامها، اطّلع على هذا المثال.

الحدّ الأقصى لطول سطر الأوامر: لمنع مشكلة الحدّ الأقصى لطول سطر الأوامر في Windows، فعِّل ميزة ملف معلِّم برنامج التجميع عبر --features=compiler_param_file.

إنشاء C++ باستخدام Clang

اعتبارًا من 0.29.0، يتوافق Bazel مع برنامج التشغيل LLVM's MSVC المتوافق مع MSVC (clang-cl.exe).

المتطلبات: للإصدار باستخدام مصرف Clang، يجب تثبيت كلا LLVM وأدوات إصدار C++ المرئي، لأنّك تستخدم clang-cl.exe كعارض برامج، إلا أنّه عليك الربط بمكتبات C++ المرئية.

يمكن لموقع Bazel التعرّف تلقائيًا على تثبيت LLVM على نظامك أو يمكنك إعلام Bazel بوضوح بمكان تثبيت LLVM من خلال BAZEL_LLVM.

  • BAZEL_LLVM دليل تثبيت LLVM

    set BAZEL_LLVM=C:\Program Files\LLVM
    

هناك سلسلة من المواقف باستخدام سلسلة Clang لإنشاء C++.

  • في البازار: 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_transparency تلقائيًا في إصدار 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

إصدار 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، يمكنك الاطّلاع على مستند التصميم هذا.