Windows'da Bazel'ı kullanma

Sorun bildir Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Bu sayfada, Windows'da Bazel kullanımı için En İyi Uygulamalar ele alınmaktadır. Kurulum İçin Windows'da Bazel'ı yükleme başlıklı makaleyi inceleyin.

Bilinen sorunlar

Windows ile ilgili Bazel sorunları "ekip-Windows" olarak işaretlenir etiketini kullanabilirsiniz. Mevcut sorunları burada görebilirsiniz.

En iyi uygulamalar

Uzun yol sorunlarından kaçının

MSVC derleyicisi de dahil olmak üzere bazı araçlarda Windows'da Maksimum Yol Uzunluğu Sınırlaması bulunur. Bu sorunla karşılaşmamak amacıyla --output_user_root işaretini kullanarak Bazel için kısa bir çıkış dizini belirtebilirsiniz.

Örneğin, aşağıdaki satırı bazelrc dosyanıza ekleyin:

startup --output_user_root=C:/tmp

8.3 dosya adı desteğini etkinleştirme

Bazel, uzun dosya yolları için kısa ad sürümü oluşturmaya çalışıyor. Ancak bunu yapmak için uzun yola sahip dosyanın bulunduğu birim için 8.3 dosya adı desteğinin etkinleştirilmesi gerekir. Aşağıdaki komutu çalıştırarak tüm birimlerde 8.3 ad oluşturma özelliğini etkinleştirebilirsiniz:

fsutil 8dot3name set 0

Bazı özellikler, Windows'da Bazel'ın dosya sembolik bağlantıları oluşturabilmesini gerektirir. öğesini etkinleştirerek Geliştirici Modu (Windows 10 sürüm 1703 veya sonraki sürümlerde) ya da Bazel'i yönetici olarak çalıştırarak. Bu işlem, aşağıdaki özellikleri etkinleştirir:

Bunu kolaylaştırmak için, bazelrc dosyanıza aşağıdaki satırları ekleyin:

startup --windows_enable_symlinks
build --enable_runfiles

Not: Windows'da sembolik bağlantılar oluşturmak pahalı bir işlemdir. --enable_runfiles işareti çok sayıda dosya sembolik bağlantısı oluşturabilir. Bu özelliği yalnızca ihtiyaç duyduğunuzda etkinleştirin.

Bazel'i çalıştırma: MSYS2 kabuğu, komut istemi veya Powershell

Öneri: Bazel'i komut isteminden (cmd.exe) veya PowerShell.

15.01.2020 tarihinden itibaren bash üzerinden Bazel çalıştırmayın. MSYS2 kabuklarından, Git Bash'ten, Cygwin'den ya da başka bir Bash varyantından. Bazel çoğu kullanım alanında işe yarayabilir. Örneğin, derlemeyi MSYS2'den Ctrl+C ile kesme). Ayrıca, MSYS2 altında çalıştırmayı seçerseniz MSYS2'nin otomatik yol dönüştürme, aksi takdirde MSYS, komut satırı bağımsız değişkenlerini dönüştürür Windows yollarına çıkan Unix yollarına (//foo:bar gibi) görünen. Görüntüleyin bu StackOverflow yanıtını inceleyebilirsiniz.

Bash olmadan Bazel kullanma (MSYS2)

Bash olmadan bazel derlemesi kullanma

1.0'dan önceki Bazel sürümleri, bazı kurallar oluşturmak için Bash'in kullanılmasını gerektiriyordu.

Bazel 1.0'dan başlayarak, aşağıdaki durumlar haricinde herhangi bir kuralı Bash olmadan oluşturabilirsiniz:

  • genrule, çünkü genrules Bash komutlarını yürütüyor
  • Doğaları gereği Bash kullanılması gerektiğinden sh_binary veya sh_test kuralı
  • ctx.actions.run_shell() veya ctx.resolve_command() kullanan Starlark kuralı

Ancak genrule genellikle şu gibi basit görevler için kullanılır: dosya kopyalama veya bir metin dosyası yazabilirsiniz. genrule kullanmak yerine (ve Bash'e bağlı olarak) uygun bir kural bulabilirsiniz bazel-skylib deposu. Windows'da oluşturulduğunda bu kurallar Bash gerektirmez.

Bash olmadan bazel testini kullanma

Eskiden 1.0'dan önceki Bazel sürümleri, herhangi bir öğeyi bazel test için Bash işlemini gerektiriyordu.

Bazel 1.0'dan başlayarak, aşağıdaki durumlar haricinde tüm kuralları Bash kullanmadan test edebilirsiniz:

  • --run_under hesabını kullanıyorsunuz
  • test kuralının kendisi Bash'i gerektirir (çünkü yürütülebilir dosyası bir kabuk komut dosyasıdır)

Bash olmadan bazel çalıştırma

Eskiden 1.0'dan önceki Bazel sürümleri, herhangi bir öğeyi bazel run için Bash işlemini gerektiriyordu.

Bazel 1.0'dan başlayarak, aşağıdaki durumlar haricinde tüm kuralları Bash olmadan çalıştırabilirsiniz:

  • --run_under veya --script_path kullanıyorsunuz
  • test kuralının kendisi Bash'i gerektirir (çünkü yürütülebilir dosyası bir kabuk komut dosyasıdır)

sh_binary ve sh_* kuralları ve ctx.actions.run_shell() kullanımı Bash olmadan

sh_* kuralları oluşturup test etmek ve Starlark'ı oluşturup test etmek için Bash'e ihtiyacınız var ctx.actions.run_shell() ve ctx.resolve_command() kullanan kurallar. Bu yalnızca projenizdeki kurallar için değil, aynı zamanda dış kaynaklardaki projenizin bağlı olduğu veri depolarıdır (geçişli olarak bile).

Gelecekte, Linux (WSL) kullanarak bu kuralları oluşturabilirsiniz, ancak şu an için Windows'da Bazel alt ekibi.

Ortam değişkenlerini ayarlama

Windows Komut İstemi'nde (cmd.exe) ayarladığınız ortam değişkenleri yalnızca her şeyi ekleyebilirsiniz. Yeni bir cmd.exe başlatırsanız şunları yapmanız gerekir: değişkenleri tekrar ayarlayın. cmd.exe başladığında değişkenleri her zaman ayarlamak için bunları Control Panel > System Properties > Advanced > Environment Variables... iletişim kutusundaki Kullanıcı değişkenleri veya Sistem değişkenleri bölümüne ekleyebilirsiniz.

Windows'da geliştirin

MSVC ile C++ oluşturma

MSVC ile C++ hedefleri oluşturmak için gerekenler:

  • Visual C++ derleyici.

  • (İsteğe bağlı) BAZEL_VC ve BAZEL_VC_FULL_VERSION ortam değişkeni.

    Bazel, sisteminizde Visual C++ derleyiciyi otomatik olarak algılar. Bazel'a belirli bir VC kurulumunu kullanmasını bildirmek için şu ortam değişkenlerini kullanabilirsiniz:

    Visual Studio 2017 ve 2019 için BAZEL_VC değerlerinden birini ayarlayın. Ayrıca, BAZEL_VC_FULL_VERSION değerini de ayarlayabilirsiniz.

    • Visual C++ Derleme Araçları yükleme dizini için BAZEL_VC

      set BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC
      
    • BAZEL_VC_FULL_VERSION (İsteğe bağlı) Yalnızca Visual Studio 2017 ve 2019 için tam sürüm Visual C++ Derleme Araçlarınızın numarası. Tam Visual C++ Derleme Araçları birden fazla sürüm yüklüyse BAZEL_VC_FULL_VERSION aracılığıyla sürümü, aksi takdirde Bazel en son sürümü seçer.

      set BAZEL_VC_FULL_VERSION=14.16.27023
      

    Visual Studio 2015 veya daha eski sürümler için BAZEL_VC değerini ayarlayın. (BAZEL_VC_FULL_VERSION desteklenmez.)

    • Visual C++ Derleme Araçları yükleme dizini için BAZEL_VC

      set BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
      
  • Windows SDK.

    Windows SDK'sı derleme sırasında ihtiyacınız olan başlık dosyalarını ve kitaplıkları içerir Bazel'ın kendisi de dahil olmak üzere Windows uygulamaları. Varsayılan olarak en son yüklenen Windows SDK'sı emin olmanız gerekir. BAZEL_WINSDK_FULL_VERSION ayarlayarak Windows SDK sürümünü de belirtebilirsiniz. Siz 10.0.10240.0 gibi tam bir Windows 10 SDK numarası kullanabilir veya Windows 8.1'i kullanmak için 8.1 belirtebilir SDK (Windows 8.1 SDK'sının yalnızca bir sürümü mevcuttur). Lütfen Windows SDK'sı yüklendi.

    Zorunluluk: Bu, VC 2017 ve 2019'da desteklenir. Bağımsız VC 2015 Derleme Araçları desteği yoksa tam Visual Studio 2015 yüklemesi gerekir, aksi takdirde BAZEL_WINSDK_FULL_VERSION yoksayılacak.

    set BAZEL_WINSDK_FULL_VERSION=10.0.10240.0
    

Her şey hazırsa hemen bir C++ hedefi oluşturabilirsiniz!

Örneklerimizden birinden hedef oluşturmayı deneyin sağlar:

bazel build //examples/cpp:hello-world
bazel-bin\examples\cpp\hello-world.exe

Varsayılan olarak, derlenen ikili programlar x64 mimarisini hedefler. Farklı bir hedef mimariniz için --cpu derleme seçeneğini ayarlayın: * x64 (varsayılan): --cpu=x64_windows veya seçenek yok * 86: --cpu=x64_x86_windows * ARM: --cpu=x64_arm_windows * ARM64: --cpu=arm64_windows

Örneğin, ARM mimarisi hedefleri oluşturmak için şu komutu çalıştırın:

bazel build //examples/cpp:hello-world --cpu=x64_arm_windows

Dinamik Bağlantılı Kitaplıklar (DLL dosyaları) oluşturmak ve kullanmak için şu örnek bölümüne bakın.

Komut Satırı Uzunluğu Sınırı: Windows komut satırı uzunluk sınırı sorunu, derleyici parametre dosyası özelliğini --features=compiler_param_file aracılığıyla etkinleştirin.

Clang ile C++ derleme

0.29.0'dan itibaren Bazel, LLVM'nin MSVC uyumlu derleyici sürücüsüyle (clang-cl.exe) derleme işlemlerini destekler.

Gereksinim: Clang ile derlemek için her ikisini de yüklemeniz gerekir LLVM ve Visual C++ Derleme araçları, çünkü derleyici olarak clang-cl.exe kullansanız da Görsel C++ kitaplıkları.

Bazel, sisteminizdeki LLVM yüklemesini otomatik olarak algılayabilir veya doğrudan sisteme BAZEL_LLVM tarafından LLVM'nin yüklendiği Bazel.

  • LLVM yükleme dizinine BAZEL_LLVM

    set BAZEL_LLVM=C:\Program Files\LLVM
    

C++ derlemesi için Clang araç zincirini etkinleştirmek için birkaç durum vardır.

  • Bazel 0.28 ve daha eski sürümlerde: Clang desteklenmez.

  • --incompatible_enable_cc_toolchain_resolution olmadan: Clang araç zincirini bir derleme işareti --compiler=clang-cl ile etkinleştirebilirsiniz.

  • --incompatible_enable_cc_toolchain_resolution ile: BUILD file dosyanıza bir platform hedefi (ör. üst düzey BUILD dosyası) eklemeniz gerekir:

    platform(
        name = "x64_windows-clang-cl",
        constraint_values = [
            "@platforms//cpu:x86_64",
            "@platforms//os:windows",
            "@bazel_tools//tools/cpp:clang-cl",
        ],
    )
    

    Ardından, aşağıdaki iki yöntemden birini kullanarak Clang araç zincirini etkinleştirebilirsiniz:

    • Aşağıdaki derleme işaretlerini belirtin:
    --extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows-clang-cl --extra_execution_platforms=//:x64_windows-clang-cl
    
    • Platformu ve araç zincirini MODULE.bazel dosyanıza kaydedin:
    register_execution_platforms(
        ":x64_windows-clang-cl"
    )
    
    register_toolchains(
        "@local_config_cc//:cc-toolchain-x64_windows-clang-cl",
    )
    

    --incompatible_enable_cc_toolchain_resolution işaretinin gelecekteki Bazel sürümünde varsayılan olarak etkinleştirilmesi planlanmaktadır. Dolayısıyla, Clang desteğinin ikinci yaklaşımda etkinleştirilmesi önerilir.

Java'yı geliştirin

Java hedefleri oluşturmak için ihtiyacınız olanlar:

Windows'da Bazel, java_binary kuralları için iki çıkış dosyası oluşturur:

  • .jar dosyası
  • JVM için ortamı ayarlayabilecek ve ikili programı çalıştırabilecek bir .exe dosyası.

Örneklerimizden birinden hedef oluşturmayı deneyin sağlar:

  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'u derleme

Python hedefleri oluşturmak için şunlara ihtiyacınız vardır:

Windows'da Bazel, py_binary kuralları için iki çıkış dosyası oluşturur:

  • kendi kendine ayıklanan bir zip dosyası
  • Python yorumlayıcısını çalıştırabilen yürütülebilir bir dosya bağımsız değişken olarak kendi kendini çıkaran zip dosyası

Yürütülebilir dosyayı (.exe uzantısına sahiptir) çalıştırabilir veya Python'da, bağımsız değişken olarak kendi kendini çıkaran zip dosyası kullanılır.

Örneklerimizden birinden hedef oluşturmayı deneyin sağlar:

  bazel build //examples/py_native:bin
  bazel-bin\examples\py_native\bin.exe
  python bazel-bin\examples\py_native\bin.zip

Bazel'in web sitesinde Python hedeflerini nasıl oluşturduğuyla ilgili ayrıntılı bilgi Windows için bu tasarıma göz atın dokümanı'nı açın.