Derleme yapmak, test çalıştırmak veya bağımlılık grafiğini sorgulamak için komut dosyalarından Bazel'i çağırabilirsiniz. Bazel, etkili komut dosyası oluşturmayı sağlamak için tasarlanmıştır ancak komut dosyalarınızı daha sağlam hale getirmek için göz önünde bulundurmanız gereken bazı ayrıntılar bu bölümde listelenmiştir.
Çıkış tabanını seçme
--output_base
seçeneği, Bazel sürecinin bir derlemenin çıktılarını nereye yazması gerektiğini ve Bazel tarafından dahili olarak kullanılan çeşitli çalışma dosyalarını (bunlardan biri, çıkış tabanının birden fazla Bazel süreci tarafından eşzamanlı olarak mutasyona uğramasına karşı koruma sağlayan bir kilittir) kontrol eder.
Komut dosyanız için doğru çıkış ana dizini seçimi çeşitli faktörlere bağlıdır. Derleme çıktılarını belirli bir konuma yerleştirmeniz gerekiyorsa kullanmanız gereken çıkış tabanını bu durum belirler. Bazel'e "salt okunur" çağrı yapıyorsanız (bazel query
gibi) kilitleme faktörleri daha önemlidir. Özellikle, komut dosyanızın birden fazla örneğini eşzamanlı olarak çalıştırmanız gerekiyorsa her birine farklı (veya rastgele) bir çıkış tabanı vermeniz gerekir.
Varsayılan çıkış taban değerini kullanırsanız kullanıcının etkileşimli Bazel komutları tarafından kullanılan kilitle rekabet edersiniz. Kullanıcı, derleme gibi uzun süren komutlar gönderirse komut dosyanızı devam ettirebilmek için bu komutların tamamlanmasını beklemesi gerekir.
Sunucu moduyla ilgili notlar
Varsayılan olarak Bazel, optimizasyon olarak uzun süreli bir sunucu işlemi kullanır. Bazel'i bir komut dosyasında çalıştırırken, sunucuyla işiniz bittiğinde shutdown
çağırmayı veya boştaki sunucuların hemen kapanması için --max_idle_secs=5
belirtmeyi unutmayın.
Hangi çıkış kodunu alacağım?
Bazel, kaynak kodun Bazel'in doğru şekilde yürütülmesini engelleyen harici hatalardan kaynaklanması nedeniyle yapılan hataları ayırt etmeye çalışır. Bazel yürütme aşağıdaki çıkış kodlarıyla sonuçlanabilir:
Tüm komutlarda ortak olan çıkış kodları:
0
- Başarılı2
: Komut satırı sorunu, Hatalı veya yasa dışı işaretler ya da komut kombinasyonu veya Hatalı ortam değişkenleri. Komut satırınız değiştirilmelidir.8
- Derleme kesintiye uğradı ancak düzenli bir kapatma işlemiyle sonlandırıldı.9
- Sunucu kilidi korundu ve--noblock_for_lock
geçildi.32
- Bu makinede Harici Ortam Hatası yok.33
: Bazel'de bellek yetersizliği nedeniyle kilitlenme meydana geldi. Komut satırınızı değiştirmeniz gerekir.34
: Google'ın dahili kullanımı için ayrılmıştır.35
- Dahili Google kullanımı için ayrılmıştır.36
- Yerel çevre sorunu. Kalıcı olabilir.37
- İşlenmemiş İstisna / Dahili Bazel Hatası.38
: Google'ın dahili kullanımı için ayrılmıştır.41-44
- Dahili Google kullanımı için ayrılmıştır.45
: Derleme Etkinliği Hizmeti'nde sonuçlar yayınlanırken hata oluştu.47
- Dahili Google kullanımı için ayrılmıştır.
bazel build
ve bazel test
komutları için döndürülen kodlar:
1
: Derleme başarısız oldu.3
- Derleme başarılı ancak bazı testler başarısız oldu veya zaman aşımına uğradı.4
: Derleme başarılı ancak test istendiyse bile test bulunamadı.
bazel run
için:
1
: Derleme başarısız oldu.- Derleme başarılı olur ancak yürütülen alt süreç sıfır olmayan bir çıkış kodu döndürürse bu kod, komutun çıkış kodu da olur.
bazel query
için:
3
- Kısmi başarı, ancak sorgu giriş BUILD dosyası kümesinde 1 veya daha fazla hatayla karşılaştı. Bu nedenle işlem sonuçları %100 güvenilir değil. Bunun nedeni büyük olasılıkla komut satırındaki bir--keep_going
seçeneğidir.7
: Komut hatası.
Gelecekteki Bazel sürümleri, genel hata çıkış kodu 1
'ü belirli bir anlamı olan sıfır olmayan farklı bir değerle değiştirerek ek çıkış kodları ekleyebilir.
Ancak sıfır olmayan tüm çıkış değerleri her zaman hata oluşturur.
.bazelrc dosyasını okuma
Bazel varsayılan olarak .bazelrc
dosyasını ana çalışma alanı dizininden veya kullanıcının ana dizininden okur. Bu işlemin istenip istenmediği, komut dosyanız için bir seçimdir. Komut dosyanızın tamamen kapalı olması gerekiyorsa (ör. sürüm derlemeleri yaparken) --bazelrc=/dev/null
seçeneğini kullanarak .bazelrc dosyasının okunmasını devre dışı bırakmanız gerekir. Kullanıcının tercih ettiği ayarları kullanarak bir derleme gerçekleştirmek isterseniz varsayılan davranış daha iyidir.
Komut günlüğü
Bazel çıkışı, aşağıdaki komutla bulabileceğiniz komut günlük dosyasında da mevcuttur:
bazel info command_log
Komut günlük dosyası, en son Bazel komutunun iç içe yerleştirilmiş stdout ve stderr akışlarını içerir. bazel info
çalıştırıldığında en son Bazel komutu olduğu için bu dosyanın içeriğinin üzerine yazılacağını unutmayın.
Ancak --output_base
veya --output_user_root
seçeneklerinin ayarını değiştirmediğiniz sürece komut günlüğü dosyasının konumu değişmez.
Çıkışı ayrıştırma
Bazel çıkışının birçok amaç için ayrıştırılması oldukça kolaydır. Komut dosyanız için yararlı olabilecek iki seçenek vardır: İlerleme mesajlarını bastıran --noshow_progress
ve "güncel derleme" mesajlarının yazdırılıp yazdırılmayacağını kontrol eden --show_result n
. Bu mesajlar, hangi hedeflerin başarıyla derlendiğini ve oluşturdukları çıkış dosyalarının konumunu bulmak için ayrıştırılabilir. Bu iletilere güveniyorsanız çok büyük bir n değeri belirttiğinizden emin olun.
Profil çıkarma ile performans sorunlarını giderme
Performans Profilleme bölümüne bakın.