Windows'da Bazel'ı kullanma

Sorun bildirin Kaynağı göster

Bu sayfada, Windows'da Bazel kullanımı için En İyi Uygulamalar ele alınmaktadır. Yükleme talimatları için Windows'a Bazel yükleme başlıklı makaleye bakın.

Bilinen sorunlar

Windows ile ilgili Bazel sorunları, GitHub'da "ekip-Windows" etiketiyle işaretlenir. 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, Geliştirici Modu'nu etkinleştirerek (Windows 10 sürüm 1703 veya sonraki sürümlerde) veya Bazel'i yönetici olarak çalıştırarak Windows'da Bazel'in dosya sembolik bağlantıları oluşturabilmesini gerektirir. 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'den çalıştırın.

15.01.2020 tarihinden itibaren, bash üzerinden Bazel'i MSYS2 kabuklarından, Git Bash'ten, Cygwin'den veya başka bir Bash varyantından çalıştırmayın. Bazel çoğu kullanım alanında işe yaraysa da MSYS2'den Ctrl+C ile derlemeyi kesintiye uğratmak gibi bazı işlevlerde sorun vardır. Ayrıca, MSYS2 altında çalıştırmayı seçerseniz MSYS2'nin otomatik yol dönüşümünü devre dışı bırakmanız gerekir. Aksi takdirde MSYS, Unix yollarına benzer olan komut satırı bağımsız değişkenlerini (//foo:bar gibi) Windows yollarına dönüştürür. Ayrıntılar için bu StackOverflow yanıtına bakın.

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 dosya kopyalama veya metin dosyası yazma gibi basit görevler için kullanılır. genrule kullanmak yerine (ve Bash'e bağlı olarak) bazel-skylib deposunda uygun bir kural bulabilirsiniz. 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)

Binary ve sh* kurallarını ve Bash olmadan ctx.actions.run_shell() kullanma

sh_* kuralları oluşturup test etmek ve ctx.actions.run_shell() ile ctx.resolve_command() kullanan Starlark kuralları oluşturup test etmek için Bash'e ihtiyacınız var. Bu, yalnızca projenizdeki kurallar için değil, projenizin bağlı olduğu (geçişli bile olsa) harici depolarındaki kurallar için de geçerlidir.

Gelecekte, bu kuralları oluşturmak amacıyla Linux için Windows Alt Sistemi (WSL) kullanma seçeneği sunulabilir ancak şu anda bu, Windows'da Bazel alt ekibi için bir öncelik değildir.

Ortam değişkenlerini ayarlama

Windows Komut İstemi'nde (cmd.exe) ayarladığınız ortam değişkenleri yalnızca bu komut istemi oturumunda ayarlanır. Yeni bir cmd.exe başlatırsanız değişkenleri tekrar ayarlamanız gerekir. 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 yüklemesi kullanmasını bildirmek için aşağıdaki ortam değişkenlerini ayarlayabilirsiniz:

    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 Visual C++ Derleme Araçlarınızın tam sürüm numarası. Birden fazla sürüm yüklüyse BAZEL_VC_FULL_VERSION aracılığıyla tam Visual C++ Derleme Araçları sürümünü seçebilirsiniz. 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'sı.

    Windows SDK'sı, Bazel de dahil olmak üzere Windows uygulamalarını oluştururken ihtiyacınız olan başlık dosyalarını ve kitaplıkları içerir. Varsayılan olarak en son yüklenen Windows SDK'sı kullanılır. BAZEL_WINSDK_FULL_VERSION ayarlayarak Windows SDK sürümünü de belirtebilirsiniz. Windows 8.1 SDK'sını kullanmak için 10.0.10240.0 gibi tam bir Windows 10 SDK numarası kullanabilir veya 8.1 belirtebilirsiniz (Windows 8.1 SDK'sının yalnızca bir sürümü mevcuttur). Lütfen belirtilen Windows SDK'sının yüklü olduğundan emin olun.

    Zorunluluk: Bu, VC 2017 ve 2019'da desteklenir. Bağımsız VC 2015 Derleme Araçları, Windows SDK'sının seçilmesini desteklemez. Tam Visual Studio 2015 yüklemesi gerekir. Aksi takdirde BAZEL_WINSDK_FULL_VERSION yoksayılır.

    set BAZEL_WINSDK_FULL_VERSION=10.0.10240.0
    

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

Örnek projelerimizin birinden hedef oluşturmayı deneyin:

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 mimari belirtmek için hedef mimariniz için --cpu derleme seçeneğini ayarlayın: * x64 (varsayılan): --cpu=x64_windows veya seçenek yok * x86: --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 bu örneğe bakın.

Komut Satırı Uzunluğu Sınırı: Windows komut satırı uzunluk sınırı sorununu önlemek için --features=compiler_param_file aracılığıyla derleyici parametre dosyası özelliğini 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 LLVM ve Visual C++ Derleme araçlarının ikisini de yüklemeniz gerekir. Çünkü derleyici olarak clang-cl.exe'yı kullanmanıza rağmen Visual C++ kitaplıklarına bağlanmanız gerekir.

Bazel, sisteminizdeki LLVM yüklemesini otomatik olarak algılayabilir veya BAZEL_LLVM tarihine kadar Bazel'a LLVM'nin nerede yüklendiğini açıkça söyleyebilirsiniz.

  • 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 WORKSPACE 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. Bu nedenle, Clang desteğini ikinci yaklaşımda etkinleştirmeniz ö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ı.

Örnek projelerimizin birinden hedef oluşturmayı deneyin:

  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ı bağımsız değişken olarak kendi kendini çıkaran zip dosyasıyla başlatabilen yürütülebilir bir dosya

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

Örnek projelerimizin birinden hedef oluşturmayı deneyin:

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

Bazel'ın Windows'da Python hedeflerini nasıl oluşturduğuyla ilgili ayrıntılı bilgi edinmek istiyorsanız bu tasarım belgesine göz atın.