Windows'da Bazel'ı kullanma

Sorun bildir Kaynağı görüntüle Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Bu sayfada, Windows'da Bazel'i kullanmayla ilgili en iyi uygulamalar ele alınmaktadır. Yükleme talimatları için Windows'a Bazel'i yükleme başlıklı makaleyi inceleyin.

Bilinen sorunlar

Windows ile ilgili Bazel sorunları, GitHub'da "team-Windows" etiketiyle işaretlenir. Düzeltilmemiş sorunları buradan inceleyebilirsiniz.

En iyi uygulamalar

Uzun yol sorunlarından kaçınma

MSVC derleyicisi de dahil olmak üzere bazı araçlarda Windows'da 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ışır. Ancak bunu yapmak için, uzun yola sahip 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şturmayı etkinleştirebilirsiniz:

fsutil 8dot3name set 0

Bazı özellikler için Bazel'in Windows'da dosya sembolik bağlantıları oluşturabilmesi gerekir. Bunun için Geliştirici Modu'nu etkinleştirmeniz (Windows 10 sürüm 1703 veya daha yeni sürümlerde) ya da Bazel'i yönetici olarak çalıştırmanız gerekir. Bu özellikler sayesinde:

İşinizi 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 sembolik bağlantısı oluşturabilir. Bu özelliği yalnızca ihtiyacınız olduğunda etkinleştirin.

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

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

15.01.2020 itibarıyla Bazel'i bash konumundan (MSYS2 kabuğu, Git Bash, Cygwin veya başka bir Bash varyantı) çalıştırmayın. Bazel çoğu kullanım alanında çalışsa da MSYS2'den Ctrl+C ile derlemeye müdahale etme gibi bazı şeyler bozulur. 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 benzeyen (ör. //foo:bar) 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.

Bazel'i Bash olmadan kullanma (MSYS2)

Bash olmadan bazel build kullanma

1.0'dan önceki Bazel sürümlerinde bazı kuralların oluşturulması için Bash kullanılması gerekiyordu.

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

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

Bash olmadan bazel test kullanma

1.0'dan önceki Bazel sürümlerinde bazel test için Bash kullanılması gerekiyordu.

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 gerektirir (çünkü yürütülebilir dosyası bir kabuk komut dosyasıdır).

Bash olmadan bazel run komutunu kullanma

1.0'dan önceki Bazel sürümlerinde bazel run için Bash kullanılması gerekiyordu.

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ıyorsanız
  • Test kuralının kendisi Bash gerektirir (çünkü yürütülebilir dosyası bir kabuk komut dosyasıdır).

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

sh_* kurallarını oluşturup test etmek ve ctx.actions.run_shell() ile ctx.resolve_command() kullanan Starlark kurallarını 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 (hatta geçişli olarak) harici depolardaki kurallar için de geçerlidir.

Gelecekte bu kuralları oluşturmak için Linux için Windows Alt Sistemi'ni (WSL) kullanma seçeneği sunulabilir ancak şu anda bu, Windows'da Bazel alt ekibinin öncelikleri arasında yer almıyor.

Ortam değişkenlerini ayarlama

Windows komut isteminde (cmd.exe) ayarladığınız ortam değişkenleri yalnızca söz konusu komut istemi oturumunda ayarlanır. Yeni bir cmd.exe başlattığınızda değişkenleri tekrar ayarlamanız gerekir. Değişkenleri cmd.exe her başladığında ayarlamak için bunları Control Panel > System Properties > Advanced > Environment Variables... iletişim kutusundaki Kullanıcı değişkenleri veya Sistem değişkenleri'ne ekleyebilirsiniz.

Windows'da geliştirme

MSVC ile C++ derleme

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

  • Visual C++ derleyicisi.

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

    Bazel, sisteminizdeki Visual C++ derleyicisini otomatik olarak algılar. Bazel'e belirli bir VC yüklemesini kullanmasını söylemek 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 da 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++ Build Tools'un tam sürüm numarası. Birden fazla sürüm yüklüyse BAZEL_VC_FULL_VERSION üzerinden tam Visual C++ Build Tools sürümünü seçebilirsiniz. Aksi takdirde Bazel en yeni 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 desteklenmiyor.)

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

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

    Windows SDK'sı, Bazel'in kendisi de dahil olmak üzere Windows uygulamaları oluştururken ihtiyacınız olan başlık dosyalarını ve kitaplıkları içerir. Varsayılan olarak, yüklenen en yeni Windows SDK'sı kullanılır. Ayrıca BAZEL_WINSDK_FULL_VERSION ayarını yaparak Windows SDK sürümünü 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'nın yüklü olduğundan emin olun.

    Gereksinim: Bu özellik VC 2017 ve 2019 ile desteklenir. Bağımsız VC 2015 Build Tools, Windows SDK'nın seçilmesini desteklemez. Aksi takdirde BAZEL_WINSDK_FULL_VERSION yoksayılacağından tam Visual Studio 2015 yüklemesine ihtiyacınız vardır.

    set BAZEL_WINSDK_FULL_VERSION=10.0.10240.0
    

Her şey ayarlandıysa şimdi bir C++ hedefi oluşturabilirsiniz.

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

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

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

kullanın.

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

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

Dinamik olarak 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ı uzunluğu sınırı sorununu önlemek için --features=compiler_param_file üzerinden derleyici parametre dosyası özelliğini etkinleştirin.

Clang ile C++ derleme

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

Şart: Clang ile derleme yapmak için clang-cl.exe derleyicisini kullanıyor olsanız da Visual C++ kitaplıklarına bağlantı oluşturmanız gerektiğinden LLVM ve Visual C++ Build Tools'u birlikte yüklemeniz gerekir.

Bazel, sisteminizdeki LLVM yüklemesini otomatik olarak algılayabilir veya BAZEL_LLVM ile LLVM'nin yüklendiği yeri Bazel'e açıkça söyleyebilirsiniz.

  • BAZEL_LLVM LLVM yükleme dizini

    set BAZEL_LLVM=C:\Program Files\LLVM

C++ oluşturmak için Clang araç zincirini etkinleştirmenin çeşitli yolları vardır.

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

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

  • --incompatible_enable_cc_toolchain_resolution ile: BUILD file dosyanıza 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, Clang araç zincirini aşağıdaki iki yöntemden biriyle 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şımla etkinleştirmeniz önerilir.

Build Java

Java hedefleri oluşturmak için gerekenler:

Windows'da 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

Build Python

Python hedefleri oluşturmak için gerekenler:

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

  • kendi kendini ayıklayan bir ZIP dosyası
  • Python yorumlayıcısını, bağımsız ayıklanan ZIP dosyasıyla birlikte başlatabilen bir yürütülebilir dosya

Yürütülebilir dosyayı (.exe uzantılı) veya bağımsız ayıklanan zip dosyasıyla Python'ı bağımsız değişken 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'in Windows'da Python hedeflerini nasıl oluşturduğuyla ilgili ayrıntıları öğrenmek istiyorsanız bu tasarım belgesine göz atın.