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:/tmp
8.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 0
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ş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_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 (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_binary
veyash_test
kuralı, çü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_under
kullanı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_under
veya--script_path
kullanıyorsanız- Test kuralının kendisi Bash gerektirir (çünkü yürütülebilir dosyası bir kabuk komut dosyasıdır).
Bash olmadan shbinary ve sh* kurallarını ve ctx.actions.run_shell() işlevini kullanma
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_VC
veBAZEL_VC_FULL_VERSION
ortam 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_VC
seçeneklerinden birini ayarlayın. AyrıcaBAZEL_VC_FULL_VERSION
da ayarlayabilirsiniz.BAZEL_VC
Visual C++ Build Tools yükleme diziniset 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++ 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_VC
değerini ayarlayın. (BAZEL_VC_FULL_VERSION
desteklenmiyor.)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'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_VERSION
ayarı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_VERSION
yoksayı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-world
bazel-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_LLVM
LLVM 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_resolution
olmadan: Clang araç zincirini--compiler=clang-cl
derleme işaretiyle etkinleştirebilirsiniz.--incompatible_enable_cc_toolchain_resolution
ile:BUILD file
dosyanıza bir platform hedefi eklemeniz gerekir (ör. üst düzeyBUILD
dosyası):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
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 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:
.jar
dosyası- JVM için ortamı ayarlayabilen ve ikili dosyayı çalıştırabilen 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
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:bin
bazel-bin\examples\py_native\bin.exe
python 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.