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
Sembolik bağlantı desteğini etkinleştir
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
veyash_test
kuralı ctx.actions.run_shell()
veyactx.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:
(İsteğe bağlı)
BAZEL_VC
veBAZEL_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üyseBAZEL_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'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üzeyBUILD
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.