Bu sayfada, Windows'da Bazel kullanımıyla ilgili En İyi Uygulamalar ele alınmaktadır. Yükleme talimatları için Windows'a Bazel'ı yükleme başlıklı makaleye bakın.
Bilinen sorunlar
Windows ile ilgili Bazel sorunları, GitHub'da "ekip-Windows" etiketiyle işaretlenir. Açık durumdaki sorunları burada görebilirsiniz.
En iyi uygulamalar
Uzun yol sorunlarını önleme
Windows'da, MSVC derleyicisi de dahil olmak üzere bazı araçlar Maksimum Yol Uzunluğu Sınırlaması'na sahiptir. Bu sorunla karşılaşmamak için --output_user_root işaretiyle 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ştir
Bazel, uzun dosya yolları için bir kısa ad sürümü oluşturmaya çalışıyor. Ancak bunun için, uzun yol içeren dosyanın bulunduğu birim için 8.3 dosya adı desteğinin etkinleştirilmesi gerekir. Şu komutu çalıştırarak tüm birimlerde 8.3 ad oluşturmayı etkinleştirebilirsiniz:
fsutil 8dot3name set 0
Sembolik bağlantı desteğini etkinleştir
Bazı özellikler, Bazel'ın Geliştirici Modu'nu etkinleştirerek (Windows 10 1703 veya sonraki sürümlerde) veya Bazel'ı yönetici olarak çalıştırarak Windows'da dosya sembolik bağlantıları oluşturabilmesini gerektirir. Bu sayede aşağıdaki özellikler etkinleştirilir:
İşlemi kolaylaştırmak için aşağıdaki satırları bazelrc dosyanıza ekleyin:
startup --windows_enable_symlinks
build --enable_runfiles
Not: Windows'da sembolik bağlantı oluşturmak pahalı bir işlemdir.
--enable_runfiles işareti, çok sayıda dosya sembolü bağlantısı oluşturabilir. Bu özelliği yalnızca ihtiyaç duyduğunuzda etkinleştirin.
Bazel'ı çalıştırma: MSYS2 kabuğu, komut istemi ve Powershell
Öneri: Bazel'ı komut isteminden (
cmd.exe) veya PowerShell'den çalıştırın.
15.01.2020'den itibaren Bazel'ı
bash üzerinden (MSYS2 kabuğu, Git Bash, Cygwin veya başka bir Bash varyantı) çalıştırmayın. Bazel çoğu kullanım alanında işe yarasa da derlemeyi MSYS2'de Ctrl+C ile kesintiye uğratmak gibi bazı şeyler hatalıdır.
Ayrıca MSYS2 altında çalıştırmayı tercih ederseniz MSYS2'nin otomatik yol dönüştürmesini devre dışı bırakmanız gerekir. Aksi takdirde MSYS, Unix yolları (
//foo:bar gibi) gibi 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'ı Bash olmadan kullanma (MSYS2)
Bash olmadan Bazel derlemesini kullanma
1.0'dan önceki Bazel sürümleri, Bash'in bazı kuralları derlemesini gerektiriyordu.
Bazel 1.0'dan başlayarak, aşağıdaki durumlar söz konusu olmadığı sürece Bash olmadan herhangi bir kural oluşturabilirsiniz:
- Genrules Bash komutlarını yürüttüğü için
genrule
- Doğası gereği Bash'i gerektirdiği için
sh_binaryveya
sh_testkuralı
ctx.actions.run_shell()veya
ctx.resolve_command()kullanan Starlark kuralı
Ancak
genrule, genellikle dosya kopyalama veya metin dosyası yazma gibi basit görevler için kullanılır.
Bash'e bağlı olarak
genrule kullanmak yerine bazel-skylib deposunda uygun bir kural bulabilirsiniz.
Windows üzerinde oluşturulduğunda bu kurallar Bash gerektirmez.
Bash olmadan Bazel testi kullanma
1.0'dan önceki Bazel sürümleri her şeyi
bazel test için Bash'i gerektiriyordu.
Bazel 1.0'dan başlayarak, aşağıdaki durumlar dışında Bash olmadan her kuralı test edebilirsiniz:
--run_underhesabını kullanıyorsunuz
- test kuralının kendisi Bash'i gerektirir (yürütülebilir dosya bir kabuk komut dosyası olduğundan)
Bash olmadan "bazel çalıştırma" kullanma
1.0'dan önceki Bazel sürümleri her şeyi
bazel run 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_underveya
--script_pathkullanıyorsunuz
- test kuralının kendisi Bash'i gerektirir (yürütülebilir dosya bir kabuk komut dosyası olduğundan)
sh_binary ve sh_* kurallarını ve ctx.actions.run_shell() Bash olmadan kullanma
sh_* kuralları oluşturup test etmek ve
ctx.actions.run_shell() ile
ctx.resolve_command() kullanan Starlark kuralları oluşturup test etmek için Bash'e ihtiyacınız vardır. Bu, yalnızca projenizdeki kurallar için değil, projenizin temel aldığı harici depolardaki (geçişli olsa bile) kurallar için de geçerlidir.
Gelecekte, bu kuralları oluşturmak amacıyla Linux için Windows Alt Sistemi'ni (WSL) kullanma seçeneği sunulabilir ancak şu anda Bazel-on-Windows alt ekibinin önceliklerinden biri 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 kutusundaki Kullanıcı değişkenlerine veya Sistem değişkenlerine ekleyebilirsiniz.
Windows'da Geliştirin
MSVC ile C++ geliştirme
MSVC ile C++ hedefleri oluşturmak için aşağıdakilere ihtiyacınız vardır:
(İsteğe bağlı)
BAZEL_VCve
BAZEL_VC_FULL_VERSIONortam değişkeni.
Bazel, sisteminizde Visual C++ derleyicisini otomatik olarak algılar. Bazel'a belirli bir VC yüklemesini kullanmasını bildirmek için aşağıdaki ortam değişkenlerini ayarlayabilirsiniz:
Visual Studio 2017 ve 2019 için
BAZEL_VCdeğerlerinden birini ayarlayın. Ayrıca
BAZEL_VC_FULL_VERSIONolarak da ayarlayabilirsiniz.
Visual C++ Derleme Araçları yükleme dizini
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üyse
BAZEL_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 daha eski sürümler için
BAZEL_VCdeğerini ayarlayın. (
BAZEL_VC_FULL_VERSIONdesteklenmez.)
Visual C++ Derleme Araçları yükleme dizini
BAZEL_VC
set 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ını içerir. Varsayılan olarak, yüklü olan en son Windows SDK 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 sürümünü belirtebilirsiniz (Windows 8.1 SDK'sının yalnızca bir sürümü kullanılabilir). Lütfen belirtilen Windows SDK'nın yüklü olduğundan emin olun.
Gereksinim: Bu özellik VC 2017 ve 2019'da desteklenir. Bağımsız VC 2015 Derleme Araçları, Windows SDK seçmeyi desteklemez. Tam Visual Studio 2015 yüklemesi gerekir, aksi takdirde
BAZEL_WINSDK_FULL_VERSIONyoksayılır.
set BAZEL_WINSDK_FULL_VERSION=10.0.10240.0
Her şey hazırsa hemen bir C++ hedefi oluşturabilirsiniz!
Örnek projelerimizden birinden bir hedef oluşturmayı deneyin:
bazel build //examples/cpp:hello-world
bazel-bin\examples\cpp\hello-world.exe
Derlenen ikili programlar varsayılan olarak x64 mimarisini hedefler. Farklı bir hedef mimari belirtmek için hedef mimarinize yönelik
--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 Bağlantılı 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 parametresi dosya özelliğini etkinleştirin.
Clang ile C++ Geliştirme
Bazel, 0.29.0 sürümünden itibaren LLVM'nin MSVC ile 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 her ikisini de yüklemeniz gerekir. Çünkü derleyici olarak
clang-cl.exe kullansanız da yine de Visual C++ kitaplıklarına bağlantı oluşturmanız gerekir.
Bazel, sisteminizdeki LLVM yüklemesini otomatik olarak algılayabilir veya
BAZEL_LLVM tarafından Bazel'a LLVM'nin yüklendiği yeri açıkça bildirebilirsiniz.
LLVM yükleme dizinini
BAZEL_LLVM
set BAZEL_LLVM=C:\Program Files\LLVM
C++ oluşturmak için Clang araç zincirini etkinleştirmek için birkaç durum söz konusudur.
Bazel 0.28 ve daha eski sürümlerde: Clang desteklenmez.
--incompatible_enable_cc_toolchain_resolutionkullanılmadığında: Clang araç zincirini derleme işaretiyle (
--compiler=clang-cl) etkinleştirebilirsiniz.
--incompatible_enable_cc_toolchain_resolutionile:
BUILD filedosyanıza bir platform hedefi eklemeniz gerekir (ör. üst düzey
BUILDdosyası):
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
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, ikinci yaklaşımda Clang desteğini etkinleştirmeniz önerilir.
Derleme Java
Java hedefleri oluşturmak için aşağıdakilere ihtiyacınız vardır:
Windows'da Bazel,
java_binary kuralları için iki çıkış dosyası oluşturur:
- bir
.jardosyası
- JVM için ortamı ayarlayabilecek ve ikili dosyayı çalıştırabilecek bir
.exedosyası
Örnek projelerimizden birinden bir 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 aşağıdakilere ihtiyacınız vardır:
Windows'da Bazel,
py_binary kuralları için iki çıkış dosyası oluşturur:
- kendi kendine çıkan bir zip dosyası
- Python yorumlayıcısını başlatabilecek ve kendi kendine ayıklanan ZIP dosyasını bağımsız değişken
Yürütülebilir dosyayı (
.exe uzantısına sahiptir) veya bağımsız değişken olarak kendi kendine ayıklanan ZIP dosyasını kullanarak Python'u çalıştırabilirsiniz.
Örnek projelerimizden birinden bir 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.