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:/tmp8.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 0Sembolik 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ş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_symlinksbuild --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_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.
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_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 herhangi bir kuralı 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 (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:
(İ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_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_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'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ü 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 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-worldbazel-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
Ö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_LLVMLLVM yükleme diziniset 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_resolutionolmadan: Clang araç zincirini--compiler=clang-clderleme işaretiyle etkinleştirebilirsiniz.--incompatible_enable_cc_toolchain_resolutionile:BUILD filedosyanıza bir platform hedefi eklemeniz gerekir (ör. üst düzeyBUILDdosyası):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
MODULE.bazeldosyanı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:
.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 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:binbazel-bin\examples\py_native\bin.exepython 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.