Bu sayfada, Windows'da Bazel 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 "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'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
Sembolik bağlantı desteğini etkinleştirme
Bazı özellikler için Bazel'in Windows'da dosya sembolik bağlantıları oluşturabilmesi gerekir. Bunun için Geliştirici Modu'nu etkinleştirebilirsiniz (Windows 10 sürüm 1703 veya daha yeni sürümlerde) ya da Bazel'i yönetici olarak çalıştırabilirsiniz. Bu sayede aşağıdaki özellikler kullanılabilir:
İş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 çalıştırmayın. MSYS2 kabuğu, Git Bash, Cygwin veya başka bir Bash varyantı kullanmayın. Bazel çoğu kullanım alanında çalışsa da MSYS2'den Ctrl+C ile derlemeyi kesme 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_binaryveyash_testkuralı, çünkü bunlar Bash'e ihtiyaç duyar.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 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.
Bazel test'i Bash olmadan 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ç Bash olmadan herhangi bir kuralı test edebilirsiniz:
--run_underkullanı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 tüm kuralları Bash olmadan çalıştırabilirsiniz:
--run_underveya--script_pathkullanıyorsanız- Test kuralının kendisi Bash gerektirir (çünkü yürütülebilir dosyası bir kabuk komut dosyasıdır).
sh_binary ve sh_* kurallarını kullanma ve Bash olmadan ctx.actions.run_shell()
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 tüm harici depolardaki (geçişli olarak bile) kurallar için 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 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 her başladığında ayarlamak için 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ştirme
MSVC ile C++ oluşturma
MSVC ile C++ hedefleri oluşturmak için şunlara ihtiyacınız vardır:
(İsteğe bağlı)
BAZEL_VCveBAZEL_VC_FULL_VERSIONortam 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_VCseçeneklerinden birini ayarlayın. AyrıcaBAZEL_VC_FULL_VERSIONda 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++ Build Tools'un tam sürüm numarası. Birden fazla sürüm yüklüyseBAZEL_VC_FULL_VERSIONile 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_VColarak 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'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_VERSIONayarını yaparak 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'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_VERSIONyoksayılacağından tam Visual Studio 2015 kurulumuna ihtiyacınız vardır.set BAZEL_WINSDK_FULL_VERSION=10.0.10240.0
Her şey ayarlandıysa artık bir C++ hedefi oluşturabilirsiniz.
Örnek projelerimizden birini kullanarak hedef oluşturmayı deneyin:
bazel build //examples/cpp:hello-worldbazel-bin\examples\cpp\hello-world.exe
Varsayılan olarak, oluşturulan ikili dosyalar x64 mimarisini hedefler. ARM64 mimarisi için derleme yapmak üzere
--platforms=//:windows_arm64 --extra_toolchains=@local_config_cc//:cc-toolchain-arm64_windows
@local_config_cc uygulamasını MODULE.bazel ile birlikte kullanmak 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 olarak bağlanan kitaplıklar (DLL dosyaları) oluşturma ve kullanma hakkında bilgi edinmek 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 ile uyumlu derleyici sürücüsü (clang-cl.exe) ile derlemeyi destekler.
Şart: Clang ile derleme yapmak için clang-cl.exe derleyici olarak kullanılsa da Visual C++ kitaplıklarına bağlantı oluşturmanız gerektiğinden hem
LLVM'yi hem de Visual C++ Build Tools'u yüklemeniz gerekir.
Bazel, sisteminizdeki LLVM yüklemesini otomatik olarak algılayabilir veya BAZEL_LLVM ile LLVM'nin nereye yüklendiğini Bazel'e açıkça söyleyebilirsiniz.
BAZEL_LLVMLLVM yükleme diziniset BAZEL_LLVM=C:\Program Files\LLVM
Clang araç zincirini etkinleştirmek için yapılandırma, Bazel sürümünüze ve Bzlmod veya WORKSPACE kullanıp kullanmadığınıza bağlıdır.
Bazel 8 ve daha yeni sürümler:
Bzlmod'u kullanma (önerilir):
rules_ccöğesiniMODULE.bazelöğenize yüklediğinizden ve CC araç zincirlerini yapılandırdığınızdan emin olun: ```python bazel_dep(name = "rules_cc", version = "0.0.17") # Or newercc_configure = use_extension("@rules_cc//cc:extensions.bzl", "cc_configure_extension") use_repo(cc_configure, "local_config_cc") ```
BUILD dosyasında (ör. kök BUILD dosyası)
platformhedefi tanımlayın:python platform( name = "x64_windows-clang-cl", constraint_values = [ "@platforms//cpu:x86_64", "@platforms//os:windows", "@bazel_tools//tools/cpp:clang-cl", # Alias to the @rules_cc constraint in Bazel 8+ ], )Şu işaretleri kullanarak araç zincirini etkinleştirin:
bash --extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows-clang-cl --extra_execution_platforms=//:x64_windows-clang-cl
WORKSPACE'i kullanma:
rules_ccbağımlılıklarını ve araç zincirleriniWORKSPACEdosyanıza yükleyin :python load("@rules_cc//cc:repositories.bzl", "rules_cc_dependencies", "rules_cc_toolchains") rules_cc_dependencies() rules_cc_toolchains()BUILD dosyasında (ör. kök BUILD dosyası)
platformhedefi tanımlayın:python platform( name = "x64_windows-clang-cl", constraint_values = [ "@platforms//cpu:x86_64", "@platforms//os:windows", "@bazel_tools//tools/cpp:clang-cl", # Alias to the @rules_cc constraint in Bazel 8+ ], )Şu işaretleri kullanarak araç zincirini etkinleştirin:
bash --extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows-clang-cl --extra_execution_platforms=//:x64_windows-clang-cl
Bazel 7:
Not: Bazel 7'de @bazel_tools//tools/cpp:clang-cl, @rules_cc sınırlamasının takma adı değildir. Bazel 7'de clang-cl ile rules_cc öğesini doğru şekilde kullanmak için @rules_cc deposundaki bir kısıtlamaya referans vermeniz gerekir. @rules_cc//cc/private/toolchain:clang-cl etiketi teknik olarak özeldir ancak Bazel 7'de WORKSPACE ve Bzlmod kurulumları arasında tutarlı davranış için gereklidir.
Bzlmod'u kullanma:
Bazel 8 örneğindeki gibi
MODULE.bazelkurulumunu yapın.platformhedefi@rules_ccözel kısıtlamasını kullanarak tanımlayın:python platform( name = "x64_windows-clang-cl", constraint_values = [ "@platforms//cpu:x86_64", "@platforms//os:windows", "@rules_cc//cc/private/toolchain:clang-cl", # Necessary for Bazel 7 ], )Şu işaretleri kullanarak araç zincirini etkinleştirin:
bash --extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows-clang-cl --extra_execution_platforms=//:x64_windows-clang-cl
WORKSPACE'i kullanma:
rules_ccbağımlılıklarını ve araç zincirleriniWORKSPACEdosyanıza yükleyin :python load("@rules_cc//cc:repositories.bzl", "rules_cc_dependencies", "rules_cc_toolchains") rules_cc_dependencies() rules_cc_toolchains()platformhedefi@rules_ccözel kısıtlamasını kullanarak tanımlayın:python platform( name = "x64_windows-clang-cl", constraint_values = [ "@platforms//cpu:x86_64", "@platforms//os:windows", "@rules_cc//cc/private/toolchain:clang-cl", # Necessary for Bazel 7 ], )Şu işaretleri kullanarak araç zincirini etkinleştirin:
bash --extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows-clang-cl --extra_execution_platforms=//:x64_windows-clang-cl
Bazel 0.29 - 6.x:
Clang araç zincirini bir derleme işareti
--compiler=clang-clile etkinleştirin.Derlemeniz --incompatible_enable_cc_toolchain_resolution işaretini
trueolarak ayarlarsa Bazel 7.0.0 için olan yaklaşımı kullanın.
Bazel 0.28 ve önceki sürümler:
- Clang desteklenmez.
Java'yı derleme
Java hedefleri oluşturmak için ihtiyacınız olanlar:
Windows'da 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
Build Python
Python hedefleri oluşturmak için gerekenler:
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ı, bağımsız değişken olarak kendi kendini açan ZIP dosyasıyla 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:binbazel-bin\examples\py_native\bin.exepython bazel-bin\examples\py_native\bin.zip
Bazel'in Windows'da Python hedeflerini nasıl oluşturduğu hakkında ayrıntılı bilgi edinmek istiyorsanız bu tasarım belgesine göz atın.