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 "area-Windows" etiketiyle işaretlenir. GitHub-Windows.
En iyi uygulamalar
Uzun yol sorunlarını önleme
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
Simge bağlantısı desteğini etkinleştirme
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 sayede aşağıdaki özelliklerden yararlanabilirsiniz:
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 ihtiyacınız olduğunda 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 itibarıyla Bazel'i bash'den (MSYS2 kabuğundan, Git Bash'ten, Cygwin'den 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üşümünü devre dışı bırakmanız gerekir. Aksi takdirde MSYS, Unix yollarına benzeyen 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ürsh_binaryveyash_testkuralı, çünkü bunlar için Bash'e ihtiyaç vardırctx.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'ta derlendiğinde bu kurallar için Bash gerekmez.
Bash olmadan bazel test kullanma
1.0'dan önceki Bazel sürümlerinde, herhangi bir şeyi bazel test etmek için Bash gerekirdi.
Bazel 1.0'dan itibaren, aşağıdaki durumlar hariç olmak üzere herhangi bir kuralı Bash olmadan test edebilirsiniz:
--run_underkullanıyorsanız- Test kuralının kendisi Bash gerektirir (yürütülebilir dosyası bir kabuk komut dosyası olduğundan)
Bash olmadan bazel run kullanma
1.0'dan önceki Bazel sürümlerinde, herhangi bir şeyi bazel run etmek için Bash gerekirdi.
Bazel 1.0'dan itibaren, aşağıdaki durumlar hariç olmak üzere herhangi bir kuralı Bash olmadan çalıştırabilirsiniz:
--run_underveya--script_pathkullanıyorsanız- Test kuralının kendisi Bash gerektirir (yürütülebilir dosyası bir kabuk komut dosyası olduğundan)
sh_binary ve sh_* kuralları ile ctx.actions.run_shell() işlevini Bash olmadan 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 Linux için Windows Alt Sistemi'ni (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 İsteminde (cmd.exe) ayarladığınız ortam değişkenleri yalnızca ilgili 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++ derleme
MSVC ile C++ hedeflerini derlemek için şunları yapmanız gerekir:
(İsteğe bağlı)
BAZEL_VCveBAZEL_VC_FULL_VERSIONortam 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_VCseçeneklerinden birini ayarlayın. AyrıcaBAZEL_VC_FULL_VERSIONdeğerini de ayarlayabilirsiniz.BAZEL_VCVisual C++ Build Tools yükleme diziniset BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VCBAZEL_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üyseBAZEL_VC_FULL_VERSIONaracı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_VCdeğerini ayarlayın. (BAZEL_VC_FULL_VERSIONdesteklenmiyor.)BAZEL_VCVisual 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, yüklü olan en yeni Windows SDK'sı kullanılır.
BAZEL_WINSDK_FULL_VERSIONayarlayarak 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_VERSIONyoksayı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-worldbazel-bin\examples\cpp\hello-world.exe
Derlenen ikili dosyalar varsayılan olarak x64 mimarisini hedefler. ARM64 mimarisi için derlemek
--platforms=//:windows_arm64 --extra_toolchains=@local_config_cc//:cc-toolchain-arm64_windows
@local_config_cc'ü MODULE.bazel'ta tanıtmak için
bazel_dep(name = "rules_cc", version = "0.1.1")
cc_configure = use_extension("@rules_cc//cc:extensions.bzl", "cc_configure_extension")
use_repo(cc_configure, "local_config_cc")
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
Bazel, 0.29.0 sürümünden itibaren LLVM'in MSVC uyumlu derleyici sürücüsüyle (clang-cl.exe) derlemeyi 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_LLVMLLVM yükleme diziniset BAZEL_LLVM=C:\Program Files\LLVM
C++ derlemek için Clang araç setini etkinleştirmenin birkaç yolu vardır.
Bazel 7.0.0 ve sonraki sürümlerde:
BUILD filedosyanıza (ör. üst düzeyBUILDdosyası) bir platform hedefi ekleyin: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 derleme işaretlerini belirterek Clang araç setini etkinleştirin:
--extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows-clang-cl --extra_execution_platforms=//:x64_windows-clang-cl7.0.0'dan eski ancak 0.28'den yeni Bazel sürümlerinde: Bir derleme işareti
--compiler=clang-clkullanarak Clang araç setini etkinleştirin.Derlemeniz --incompatible_enable_cc_toolchain_resolution işaretini
trueolarak ayarlarsa Bazel 7.0.0 için yaklaşımı kullanın.Bazel 0.28 ve önceki sürümlerde: Clang desteklenmez.
Java oluşturma
Java hedefleri oluşturmak için şunları yapmanız gerekir:
Windows'ta Bazel, java_binary kuralları için iki çıkış dosyası oluşturur:
.jardosyası- JVM için ortamı ayarlayabilen ve ikili dosyayı çalıştırabilen bir
.exedosyası
Örnek projelerimizden birini kullanarak hedef oluşturmayı deneyin:
bazel build //examples/java-native/src/main/java/com/example/myproject:hello-worldbazel-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:binbazel-bin\examples\py_native\bin.exepython bazel-bin\examples\py_native\bin.zip
Bazel'in Windows'ta Python hedeflerini nasıl derlediğiyle ilgili ayrıntıları öğrenmek istiyorsanız bu tasarım dokümanlarına göz atın.