Windows'da Bazel'ı kullanma

Sorun bildir Kaynağı görüntüleyin Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bu sayfada, Windows'ta Bazel'i kullanmayla ilgili en iyi 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 "team-Windows" etiketiyle işaretlenir. Düzeltilmemiş sorunları burada görebilirsiniz.

En iyi uygulamalar

Uzun yol sorunlarından kaçının

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

Örneğin, bazelrc dosyanıza aşağıdaki satırı 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 bunun için uzun yolu olan dosyanın bulunduğu birimde 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, Bazel'in Windows'ta dosya sembolik bağlantıları oluşturabilmesi için geliştirici modunu (Windows 10 1703 veya daha yeni sürümlerde) etkinleştirmesini ya da Bazel'i yönetici olarak çalıştırmasını gerektirir. Bu işlem, aşağıdaki özellikleri etkinleştirir:

Bu işlemi 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ı oluşturmak maliyetli bir işlemdir. --enable_runfiles işareti, çok sayıda dosya simge 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 ve PowerShell karşılaştırması

Öneri: Bazel'i komut isteminden (cmd.exe) veya PowerShell'den çalıştırın.

15.01.2020 tarihinden itibaren, Bazel'i bash üzerinden (MSYS2 kabuğu, Git Bash, Cygwin veya başka bir Bash varyantından) çalıştırmayın. Bazel çoğu kullanım alanında işe yarasa da MSYS2'den Ctrl+C ile derlemeyi kesintiye uğratma gibi bazı işlemler çalışmaz. Ayrıca, MSYS2 altında çalıştırmayı seçerseniz MSYS2'nin otomatik yol dönüştürmesini 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.

Bazel'i Bash olmadan kullanma (MSYS2)

Bazel build'i Bash olmadan kullanma

1.0'dan önceki Bazel sürümlerinde bazı kuralları oluşturmak için Bash gerekirdi.

Bazel 1.0'dan itibaren, aşağıdakiler dışındaki tüm kuralları Bash olmadan derleyebilirsiniz:

  • genrule, çünkü genrules Bash komutlarını yürütür
  • sh_binary veya sh_test kuralı, çünkü bunlar için Bash'e ihtiyaç vardır
  • 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 iletmek için Bash'i gerektiriyordu.

Bazel 1.0'dan itibaren, aşağıdaki durumlar hariç olmak üzere herhangi bir kuralı Bash olmadan test edebilirsiniz:

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

Bash olmadan bazel run kullanma

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

Bazel 1.0'dan itibaren, aşağıdaki durumlar hariç olmak üzere herhangi bir kuralı Bash olmadan çalıştırabilirsiniz:

  • --run_under veya --script_path kullanıyorsunuz
  • Test kuralının kendisi Bash gerektirir (yürütülebilir dosyası bir kabuk komut dosyası olduğundan)

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

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 durum yalnızca projenizdeki kurallar için değil, projenizin bağlı olduğu harici depolardan herhangi birindeki kurallar için de geçerlidir (doğrudan veya dolaylı olarak).

Gelecekte bu kuralları oluşturmak için Windows için Linux alt sistemi (WSL) kullanma seçeneği olabilir ancak şu anda Windows'ta Bazel alt ekibi için öncelikli bir konu 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. Değişkenleri cmd.exe başladığında her zaman ayarlamak için Control Panel > System Properties > Advanced > Environment Variables... iletişim kutusunda Kullanıcı değişkenleri veya Sistem değişkenleri'ne ekleyebilirsiniz.

Windows'da derleme

MSVC ile C++ oluşturma

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

  • Visual C++ derleyicisi.

  • (İ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 seçeneklerinden birini ayarlayın. Ayrıca BAZEL_VC_FULL_VERSION değerini de ayarlayabilirsiniz.

    • BAZEL_VC Visual C++ Build Tools yükleme dizini

      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ın tam sürüm numarasını girin. 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 önceki sürümler için BAZEL_VC değerini ayarlayın. (BAZEL_VC_FULL_VERSION desteklenmez.)

    • BAZEL_VC Visual C++ Build Tools yükleme dizini

      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, yüklü olan en yeni Windows SDK'sı kullanılır. BAZEL_WINSDK_FULL_VERSION ayarını yaparak Windows SDK sürümünü de belirtebilirsiniz. 10.0.10240.0 gibi tam bir Windows 10 SDK numarası kullanabilir veya Windows 8.1 SDK'sını kullanmak için 8.1'i belirtebilirsiniz (Windows 8.1 SDK'sının yalnızca bir sürümü mevcuttur). Lütfen belirtilen Windows SDK'sını yüklediğinizden emin olun.

    Şart: Bu özellik VC 2017 ve 2019'da desteklenir. Bağımsız VC 2015 Derleme Araçları, Windows SDK'sının seçilmesini desteklemez. Visual Studio 2015'in tam sürümünü yüklemeniz gerekir. Aksi takdirde BAZEL_WINSDK_FULL_VERSION yoksayılır.

    set BAZEL_WINSDK_FULL_VERSION=10.0.10240.0
    

Her şey ayarlandıysa hemen bir C++ hedefi derleyebilirsiniz.

Örnek projelerimizden birini kullanarak hedef oluşturmayı deneyin:

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

Oluşturulan ikili dosyalar varsayılan olarak x64 mimarisini hedefler. Farklı bir hedef mimari belirtmek için hedef mimarinize göre --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ı kitaplıkları (DLL dosyaları) oluşturmak ve kullanmak için bu örneğe bakın.

Komut satırı uzunluk 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.

Şart: Clang ile derlemek için LLVM ve Visual C++ derleme araçlarını hem yüklemeniz gerekir. Çünkü derleyici olarak clang-cl.exe'i kullansanız bile Visual C++ kitaplıklarına bağlamanız gerekir.

Bazel, LLVM'nin sisteminizde yüklü olup olmadığını otomatik olarak algılayabilir veya BAZEL_LLVM ile LLVM'nin yüklü olduğu yeri Bazel'e açıkça belirtebilirsiniz.

  • BAZEL_LLVM LLVM yükleme dizini

    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ç setini bir derleme işaretiyle --compiler=clang-cl etkinleştirebilirsiniz.

  • --incompatible_enable_cc_toolchain_resolution ile: BUILD file dosyanıza (ör. üst düzey BUILD dosyası) bir platform hedefi 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 bir Bazel sürümünde varsayılan olarak etkinleştirilmesi planlanmaktadır. Bu nedenle, ikinci yaklaşımla Clang desteğini etkinleştirmeniz önerilir.

Java'yı geliştirin

Java hedefleri oluşturmak için şunları yapmanız gerekir:

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

  • .jar dosyası
  • JVM için ortamı ayarlayabilen ve ikili dosyayı çalıştırabilen bir .exe dosyası

Örnek projelerimizden birini kullanarak 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'ı derleme

Python hedefleri oluşturmak için şunlar gerekir:

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

  • kendi kendine açılan bir zip dosyası
  • Python yorumlayıcısını, bağımsız olarak açılan ZIP dosyasını bağımsız değişken olarak kullanarak başlatabilen bir yürütülebilir dosya

Yürütülebilir dosyayı (.exe uzantısı vardır) çalıştırabilir veya Python'u bağımsız olarak açılan zip dosyası bağımsız değişkeni olarak çalıştırabilirsiniz.

Örnek projelerimizden birini kullanarak 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.