Windows'da Bazel'ı kullanma

Bu sayfa, Windows'da Bazel kullanımıyla ilgili En İyi Uygulamaları kapsar. 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. Açık sorunları burada görebilirsiniz.

En iyi uygulamalar

Uzun yol sorunlarını önleme

MSVC derleyicisi dahil olmak üzere bazı araçlar, Windows'da Maksimum Yol Uzunluğu Sınırlaması özelliğine sahiptir. Bu sorunla karşılaşmamak için --output_user_root işaretiyle Bazel için kısa bir çıkış dizini belirtebilirsiniz.

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

startup --output_user_root=C:/tmp

8.3 dosya adı desteğini etkinleştir

Bazel, uzun dosya yolları için bir kısa ad sürümü oluşturmaya çalışıyor. Ancak bunun 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, Bazel'ın Windows'da Geliştirici Modu'nu etkinleştirerek (Windows 10 sürüm 1703 veya sonraki sürümlerde) veya Bazel'ı yönetici olarak çalıştırarak dosya sembolik bağlantıları oluşturabilmesini gerektirir. Bu, aşağıdaki özellikleri etkinleştirir:

İşlemi kolaylaştırmak için aşağıdaki satırları bazelrc dosyanıza 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'ı çalıştırma: MSYS2 kabuğu, komut istemi ve Powershell

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

15.01.2020 tarihinden itibaren Bazel'ı bash ürününden çalıştırmayın. Bunun için MSYS2 kabuğu, Git Bash, Cygwin veya başka bir Bash varyantı olabilir. Bazel çoğu kullanım alanında işe yarayabilir, ancak MSYS2'de Ctrl+C ile derlemeyi kesintiye uğratmak gibi bazı öğeler bozulur. Ayrıca, MSYS2 altında çalıştırmayı tercih ederseniz MSYS2'nin otomatik yol dönüştürmesini devre dışı bırakmanız gerekir. Aksi takdirde MSYS, Unix yollarına (//foo:bar gibi) benzer komut satırı bağımsız değişkenlerini Windows yollarına dönüştürür. Ayrıntılar için bu StackOverflow yanıtına bakın.

Bash olmadan Bazel'i (MSYS2) kullanma

Bash olmadan Bash derlemesi kullanma

1.0'dan önceki Bazel sürümleri, Bash'in bazı kurallar derlemesini gerektiriyordu.

Bazel 1.0'dan başlayarak Bash olmadan istediğiniz kuralı oluşturabilirsiniz. Bunun için aşağıdaki durumlar geçerli değildir:

  • genrule, çünkü türler Bash komutlarını yürütür
  • Doğası gereği Bash'e ihtiyaç duyduğundan 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 (Bazel-skylib deposunda) yerine bazel-skylib deposunda uygun bir kural bulabilirsiniz. Windows'da oluşturulan bu kurallarda Bash kullanılması gerekmez.

Bash olmadan bazel testi kullanma

1.0'dan önceki Bazel sürümleri her şeyi bazel test yapmak için Bash'ı gerektiriyordu.

Bazel 1.0'dan başlayarak, aşağıdaki durumlar haricinde Bash olmadan her kuralı test edebilirsiniz:

  • --run_under kullanıyorsun
  • test kuralının kendisi Bash'i gerektirir (yürütülebilir dosya bir kabuk komut dosyası olduğundan)

Bash olmadan bazel çalıştırma

1.0'dan önceki Bazel sürümleri her şeyi bazel run yapmak için Bash'ı gerektiriyordu.

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

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

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

sh_* kurallarını 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 vardır. Bu, yalnızca projenizdeki kurallar için değil, projenizin bağlı olduğu harici depolardaki herhangi birindeki kurallar için de geçerlidir (geçişli olsa bile).

Gelecekte, bu kuralları oluşturmak amacıyla Linux için Windows Alt Sistemi'ni (WSL) kullanma seçeneği olabilir ancak şu anda Windows'da Bazel alt ekibinin önceliği 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şkenlerine veya Sistem değişkenlerine ekleyebilirsiniz.

Windows'da Geliştirin

MSVC ile C++ geliştirme

MSVC ile C++ hedefleri oluşturmak için aşağıdakilere ihtiyacınız vardır:

  • Visual C++ derleyici.

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

    Bazel, sisteminizde Visual C++ derleyicisini otomatik olarak algılar. Bazel'a belirli bir VC yüklemesini 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.

    • BAZEL_VC Görsel C++ Derleme Araçları 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ızın tam sürüm numarası. Birden fazla sürüm yüklüyse BAZEL_VC_FULL_VERSION aracılığıyla Visual C++ Derleme Araçları sürümünü tam olarak 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.)

    • BAZEL_VC Görsel C++ Derleme Araçları yükleme dizini

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

    Windows SDK'sı, Bazel dahil olmak üzere Windows uygulamaları oluştururken ihtiyaç duyduğunuz başlık dosyalarını ve kitaplıkları içerir. Varsayılan olarak, yüklü olan en son Windows SDK kullanılır. BAZEL_WINSDK_FULL_VERSION ayarlayarak 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ü kullanılabilir). Lütfen belirtilen Windows SDK'nın yüklü olduğundan emin olun.

    Gereksinim: Bu özellik VC 2017 ve 2019'da desteklenir. Bağımsız VC 2015 Derleme Araçları, Windows SDK'yı seçmeyi 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 projelerimizden birinden bir hedef oluşturmayı deneyin:

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

Varsayılan olarak, oluşturulan ikili programlar x64 mimarisini hedefler. Farklı bir hedef mimari belirtmek üzere 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 için hedef oluşturmak üzere ş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ı 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

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

Gereksinim: Clang ile derleme yapmak için hem LLVM hem de Visual C++ Derleme araçlarını yüklemeniz gerekir. Çünkü derleyici olarak clang-cl.exe kullansanız da yine de Visual C++ kitaplıklarına bağlantı oluşturmanız gerekir.

Bazel, sisteminizdeki LLVM yüklemesini otomatik olarak algılayabilir veya BAZEL_LLVM tarafından LLVM'nin nereye yüklendiğini Bazel'a açıkça bildirebilirsiniz.

  • LLVM yükleme dizinini BAZEL_LLVM

    set BAZEL_LLVM=C:\Program Files\LLVM
    

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

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

  • --incompatible_enable_cc_toolchain_resolution kullanılmadığında: Clang araç zincirini derleme işareti (--compiler=clang-cl) ile etkinleştirebilirsiniz.

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

    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, ikinci yaklaşımda Clang desteğinin etkinleştirilmesi önerilir.

Java Derleme

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

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

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

Örnek projelerimizden birinden bir 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 Geliştirme

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

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

  • kendi kendine çıkan bir zip dosyası
  • Yürütülebilir bir dosya olabilir. Bu dosya, Python yorumlayıcısını bağımsız değişken olarak

Yürütülebilir dosyayı (.exe uzantısına sahiptir) veya bağımsız değişken olarak kendi kendine ayıklanan ZIP dosyasını kullanarak Python'u çalıştırabilirsiniz.

Örnek projelerimizden birinden bir 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ılarla ilgileniyorsanız bu tasarım belgesine göz atın.