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ı makaleyi inceleyin.
Bilinen sorunlar
Windows ile ilgili Bazel sorunları, GitHub'da "ekip-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'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 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
Sembolik bağlantı desteğini etkinleştir
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 sayede aşağıdaki özelliklerden yararlanabilirsiniz:
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ı 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 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, 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 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üş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)
Bash olmadan bazel derlemesi kullanma
1.0'dan önceki Bazel sürümlerinde bazı kuralları oluşturmak için Bash gerekirdi.
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ür- 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 dosya kopyalama veya metin dosyası yazma gibi basit görevler için kullanılır.
genrule
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
1.0'dan önceki Bazel sürümlerinde, herhangi bir şeyi bazel test
etmek için Bash gerekirdi.
Bazel 1.0'dan başlayarak, aşağıdaki durumlar haricinde tüm kuralları Bash kullanmadan 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 başlayarak, aşağıdaki durumlar haricinde tüm kuralları Bash olmadan çalıştırabilirsiniz:
--run_under
veya--script_path
kullanıyorsanız- Test kuralının kendisi Bash gerektirir (yürütülebilir dosyası bir kabuk komut dosyası olduğundan)
Binary ve sh* kurallarını ve Bash olmadan ctx.actions.run_shell() kullanma
sh_*
kurallarını oluşturmak ve test etmek, ayrıca ctx.actions.run_shell()
ve ctx.resolve_command()
kullanan Starlark kurallarını oluşturmak ve test etmek için Bash'e ihtiyacınız vardır. 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 geliştirin
MSVC ile C++ oluşturma
MSVC ile C++ hedefleri oluşturmak için:
(İsteğe bağlı)
BAZEL_VC
veBAZEL_VC_FULL_VERSION
ortam değişkeni.Bazel, sisteminizde Visual C++ derleyiciyi 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
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üyseBAZEL_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 diziniset BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
-
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 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.Ş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. 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
Oluşturulan ikili dosyalar varsayılan olarak 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
Bazel, 0.29.0 sürümünden itibaren LLVM'in MSVC uyumlu derleyici sürücüsüyle (clang-cl.exe
) derlemeyi 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.
BAZEL_LLVM
LLVM yükleme diziniset 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 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
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 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 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 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 şunlara ihtiyacınız vardır:
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ı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.