Bu bölümde, proje yönetiminde yaygın olarak kullanılan pek çok işlevi vardır.
İçindekiler
- Bourne kabuk belirteçleme
- Etiket Genişletme
- Çoğu derleme kuralı tarafından tanımlanan tipik özellikler
- Tüm derleme kurallarında ortak olan özellikler
- Tüm test kurallarında ortak özellikler (*_test)
- Tüm ikili kurallarda ortak özellikler (*_binary)
- Yapılandırılabilir özellikler
- Dolaylı çıkış hedefleri
Bourne kabuk belirteçleme
Bazı kuralların belirli dize özellikleri birden çok kurala bölünmüştür kelimeleri ile birlikte, aşağıdaki kodu da Bourne kabuğunun tokenizasyon kurallarına tırnak işareti içinde olmayan boşluklar ayrı kelimeleri sınırlar ve tek ve önlemek için çift tırnak karakterleri ve ters eğik çizgiler kullanılır. belirtiliyor.
Bu tokenizasyona tabi olan özellikler, bu belgedeki tanımlarında bu şekilde açıkça belirtilmedi.
"Marka" işlemine tabi özellikler değişken genişletme ve Bourne kabuğu
belirtkeleme genellikle rastgele seçeneklerin
derleyiciler ve diğer araçlar. Bu tür özelliklere örnek olarak şunlar verilebilir:
cc_library.copts
ve java_library.javacopts
.
Bu ikameler birlikte bir
yapılandırmaya özel bir listeye genişletilecek tek dizeli değişken
içeren bir ifadedir.
Etiket genişletme
Çok az sayıda kuralın bazı dize özellikleri etiketlenebilir
genişletme: Bu dizeler
//mypkg:target
gibi bir alt dizedir ve bu etiket bir
olarak bildirilen ön koşulu olarak,
temsil edilen dosyanın yol adı
hedef
//mypkg:target
Örnek özellikler arasında genrule.cmd
ve
cc_binary.linkopts
. Ayrıntılar proje zaman çizelgesinde
ve göreceli etiketlerin uygun olup olmadığı
genişletildi; birden fazla dosyaya genişleyen etiketlerin nasıl
vb. gibi davranır. Kural özellikleriyle ilgili dokümanların
özellikler.
Çoğu derleme kuralı tarafından tanımlanan tipik özellikler
Bu bölümde, birçok derleme kuralı tarafından tanımlanan özellikler ama hepsini değil.
Özellik | Açıklama |
---|---|
data |
Çalışma zamanında bu kural için gereken dosyalar. Dosya veya kural hedeflerini listeleyebilir. Genel olarak herhangi bir hedefe izin verir.
Yeni kurallar işlenirse bir |
deps |
Bu hedefin bağımlılıkları. Genellikle yalnızca kural hedefleri listelenir. (
bazı kurallar, dosyaların doğrudan Dile özgü kurallar, listelenen hedefleri genellikle belirli sağlayıcılar.
Bir hedefin başka bir araca bağımlı olmasının tam anlamı
Çoğunlukla bir modülün kullanılmasına izin vermek için |
licenses |
Bu hedef için kullanılacak lisans türü dizelerinin listesi. Bu, Bazel'in artık kullanmadığı, desteği sonlandırılmış bir lisanslama API'sinin bir parçasıdır. Şunları Yapmayın: bunu kullan. |
srcs |
Bu kural tarafından işlenen veya eklenen dosyalar. Genellikle dosyaları doğrudan listeler, ancak
kural hedeflerini (ör. Dile özgü kurallar, genellikle listelenen dosyaların belirli bir dosya uzantıları olduğunu unutmayın. |
Tüm derleme kurallarında ortak özellikler
Bu bölümde, dolaylı olarak tüm derlemelere eklenen özellikler kurallar.
Özellik | Açıklama |
---|---|
compatible_with |
Bu hedefin oluşturulabileceği ortamların listesi ve ortamları için de görüntüleyebilirsiniz. Bu, Bazel'in kısıtlama sisteminin bir parçasıdır. Kullanıcılar, birbirine bağımlı olabilir ve olamaz. Örneğin, harici olarak dağıtılabilir ikili programlar şirket gizli kodu içeren kitaplıklara bağlı olmamalıdır. Görüntüleyin ConstraintSemantics (Kısıtlama Semantiği) bölümüne göz atın. |
deprecation |
Bu hedefle ilişkili açıklayıcı bir uyarı mesajı. Bu genellikle bir hedefin eskidiğini kullanıcılara bildirmek için kullanılır. veya başka bir kuralın yerini aldıysa, bir pakete özelse veya herhangi bir nedenle zararlı olarak değerlendirilebilir. Belgenize (bir web sayfası, hata numarası veya örnek taşıma CL'leri gibi) Böylece iletiden kaçınmak için hangi değişikliklerin yapılması gerektiğini kolayca anlayabilir. Bunun yerine kullanabileceğiniz yeni bir hedef varsa eski hedefin tüm kullanıcılarını taşımak iyi bir fikirdir.
Bu özelliğin öğelerin oluşturulma şekli üzerinde herhangi bir etkisi yoktur, ancak
derleme aracının teşhis çıktısını etkileyebilir. Derleme aracı,
Paket içi bağımlılıklar bu uyarıdan muaftır. Bu nedenle, Örneğin, desteği sonlandırılmış bir kuralın testlerini oluşturmak bir uyarıyla karşılaşabilirsiniz. Kullanımdan kaldırılmış bir hedef, kullanımdan kaldırılan başka bir hedefe bağlıysa uyarı verilmez mesajını alırsınız. Kullanıcılar artık uygulamayı kullanmayı bıraktıktan sonra hedef kaldırılabilir. |
distribs |
Bu özel hedef için kullanılacak dağıtım yöntemi dizelerinin listesi. Bu, Bazel'in artık kullanmadığı, desteği sonlandırılmış bir lisanslama API'sinin bir parçasıdır. Şunları Yapmayın: bunu kullan. |
exec_compatible_with |
İş Listesi
|
exec_properties |
Bu hedef için seçilen bir platformun Bir anahtar hem platform hem de hedef düzeyindeki mülklerde mevcutsa değer hedeften alınır. |
features |
Özellik, bir hedefte etkinleştirilebilen veya devre dışı bırakılabilen dize etiketidir. İlgili içeriği oluşturmak için kullanılan bir özelliğin anlamı kuralın kendisine bağlıdır. Bu |
restricted_to |
Şu konum yerine bu hedefin oluşturulabileceği ortamların listesi: ortamları için de görüntüleyebilirsiniz.
Bu, Bazel'in kısıtlama sisteminin bir parçasıdır. Görüntüleyin
|
tags |
Etiketler herhangi bir kuralda kullanılabilir. Testteki etiketler ve
Bazel, aşağıdakileri tespit ederse korumalı alan kodunun davranışını değiştirir
anahtar kelimeler (herhangi bir testin
Testlerdeki etiketler genellikle hata ayıklama ve yayınlama sürecini takip etmenize yardımcı olur. Genellikle etiketler en çok C++ ve Python'da testlerine izin veriyoruz. Etiket ve boyut kullanımı öğeleri, kod tabanına dayalı olarak test paketlerinin derlenmesinde esneklik sağlar giriş politikası.
Bazel,
Test kuralının
|
target_compatible_with |
İş Listesi
Geçişli olarak uyumsuz hedeflere bağlı olan hedefler Uyumsuz olarak kabul edilir. Ayrıca, oluşturma ve test için atlanırlar. Boş liste (varsayılan değerdir), hedefin uyumlu olduğunu gösterir uyumlu bir şekilde çalışır.
Workspace Kuralları dışındaki tüm kurallar bunu destekler
özelliğini gönderin.
Bazı kurallarda bu özelliğin herhangi bir etkisi yoktur. Örneğin,
Şunun için
Bkz. Platformlar sayfasına bakın. |
testonly |
Doğru değerine ayarlanırsa yalnızca test amaçlı hedefler (testler gibi) bu hedefe bağlı olabilir.
Aynı şekilde
Testler ( Bu özelliğin amacı, hedefin üretime yayınlanan ikili programlarda bulunur. Çalışma zamanında değil, yalnızca test amaçlı olarak uygulanır ve üzerinden yaymak için, bu yöntemin mantıklı bir şekilde uygulanması gerekir. Örneğin, sahte ve sahtecilik amaçlı ve entegrasyon testleri için de yararlı olabilir. üretim kanalına yayınlanacak aynı ikili programları içeren ve bu nedenle büyük olasılıkla testonly olarak işaretlenmemelidir. Öte yandan, bağlantı kurmak bile tehlikelidir, belki de koşulsuz olarak normal davranışı geçersiz kılar, kesinlikle test amaçlı olarak işaretlenmelidir. |
toolchains |
Bu hedefin Değişkenleri oluştur olduğu hedef kümesi
erişebilir. Bu hedefler, dönüşüm hunisinin üst kısmındaki
Bunun proje yönetimi kavramından
araç zinciri çözünürlüğü
. Bunu kullanamazsınız
belirli bir |
visibility |
Bir hedefteki |
Tüm test kurallarında ortak özellikler (*_test)
Bu bölümde, tüm test kurallarında ortak olan özellikler açıklanmaktadır.
Özellik | Açıklama | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
args |
Ayarlandığında Bazel'in hedefe aktardığı komut satırı bağımsız değişkenleri
Bu bağımsız değişkenler, herhangi bir |
||||||||||||||||||||
env |
Test,
Bu özellik yalnızca |
||||||||||||||||||||
env_inherit |
Şu kaynaktan devralınacak ek ortam değişkenlerini belirtir:
test
Bu özellik yalnızca |
||||||||||||||||||||
size |
Bir test hedefinin "ağırlığını", yani çalıştırılması için ne kadar zaman/kaynak gerektiğini belirtir. Birim testleri "küçük", entegrasyon testleri "orta" ve uçtan uca testler "büyük" olarak kabul edilir veya
anlamına gelir. Bazel, varsayılan zaman aşımını belirlemek için boyutu kullanır. Bu zaman aşımı süresi
Test boyutları, aşağıdaki varsayılan zaman aşımlarına ve varsayılan en yüksek yerel kaynak değerine karşılık gelir kullanımlar:
|
||||||||||||||||||||
timeout |
Geri dönmeden önce testin ne kadar süre boyunca çalıştırılmasının beklendiği.
Bir testin boyut özelliği kaynak tahminini kontrol ederken testin
zaman aşımı bağımsız olarak ayarlanabilir. Açıkça belirtilmediği takdirde
zaman aşımı testin boyutuna bağlıdır. Test
zaman aşımı
Yukarıdakiler dışındaki zamanlarda, test zaman aşımı
Testi üretirken ortam değişkeni |
||||||||||||||||||||
flaky |
Testi hatalı olarak işaretler. Ayarlanırsa testi üç kereye kadar yürütür ve yalnızca şu koşulda başarısız olarak işaretler: her seferinde başarısızlığa uğrar. Bu özellik varsayılan olarak False (Yanlış) değerine ayarlanır ve test yalnızca bir kez uygulanır. Bu özelliğin kullanılmasının genellikle önerilmediğini unutmayın: onayları onaylandığında testlerin güvenilir bir şekilde başarılı olması gerekir. |
||||||||||||||||||||
shard_count |
Paralel kırık sayısını belirtir kullanmanız gerekir. Bu değer,
paralel parçalara ayırmalıdır. Bazı testlerde
kurallarına göre, parçalamayı etkinleştirmek için bu parametre gerekebilir
en başta sunun. Ayrıca bkz. Test parçalama etkinleştirilirse, testi oluştururken ortam değişkeni Parçalama, test çalıştırıcının test parçalama protokolünü desteklemesini gerektirir. Aksi takdirde, büyük olasılıkla her parçada her kırıkta her testi çalıştırır. istemediğiniz bir şey değildir. Görüntüleyin Parçalama Testi bölümüne göz atın. |
||||||||||||||||||||
local |
Testi, korumalı alana alınmadan yerel olarak çalıştırılmaya zorlar. Bunu True (Doğru) olarak ayarlamak, "local" değerini sağlamakla eşdeğerdir etiket olarak
( |
Tüm ikili kurallarda ortak özellikler (*_ikili)
Bu bölümde, tüm ikili kurallarında ortak olan özellikler açıklanmaktadır.
Özellik | Açıklama |
---|---|
args |
Yürütüldüğünde Bazel'in hedefe ileteceği komut satırı bağımsız değişkenleri
NOT: Hedef çalıştırıldığında bağımsız değişkenler iletilemez
başka bir komut dosyası kullanıyorsanız (örneğin, ikili dosyayı
|
env |
Hedef aşağıdaki durumlarda ayarlanacak ek ortam değişkenlerini belirtir:
Bu özellik yalnızca
NOT: Hedefi çalıştırdığınızda ortam değişkenleri ayarlanmaz
başka bir komut dosyası kullanıyorsanız (örneğin, ikili dosyayı
|
output_licenses |
Bu ikili programın oluşturduğu çıkış dosyalarının lisansları. Bu, Bazel'in artık kullanmadığı, desteği sonlandırılmış bir lisanslama API'sinin bir parçasıdır. Şunları Yapmayın: bunu kullan. |
Yapılandırılabilir özellikler
Çoğu özellik "yapılandırılabilir" olduğundan değerleri hedef farklı şekillerde oluşturulur. Özel olarak, yapılandırılabilir özellikler Bazel komut satırına iletilen işaretlere veya aşağı akış bağımlılığının hedefi istiyor. Bu, kullanarak hedefi birden fazla platform veya derleme modu için özelleştirebilirsiniz.
Aşağıdaki örnekte, farklı hedefler için farklı kaynaklar açıklanmaktadır.
inceleyebilirsiniz. bazel build :multiplatform_lib --cpu x86
çalıştırılıyor
hedefi x86_impl.cc
ile oluşturur.
--cpu arm
, bunun yerine arm_impl.cc
kullanmasına neden olur.
cc_library( name = "multiplatform_lib", srcs = select({ ":x86_mode": ["x86_impl.cc"], ":arm_mode": ["arm_impl.cc"] }) ) config_setting( name = "x86_mode", values = { "cpu": "x86" } ) config_setting( name = "arm_mode", values = { "cpu": "arm" } )
select()
işlevi
temel alınan yapılandırılabilir bir özellik için farklı alternatif değerler arasından seçim yapar.
config_setting
olan
veya constraint_value
hedef yapılandırmasının karşıladığı ölçütümüz olur.
Bazel, yapılandırılabilir özellikleri makroları işlendikten sonra ve
(teknik olarak
yükleme ve analiz aşamaları) görüntüleyin.
select()
değerlendirmesinden önce yapılan işlemler, hangi işlemin gerçekleştirildiğini bilmez
select()
öğesinin seçer. Örneğin, makrolar değiştirilemez
seçilen dala göre davranışlarını görebilir ve bazel query
,
Hedefin yapılandırılabilir bağımlılıkları hakkında yalnızca konservatif tahminlerde bulunun. Görüntüleyin
bu SSS
select()
öğesini kurallar ve makrolarla kullanma hakkında daha fazla bilgi edinin.
Dokümanlarında nonconfigurable
olarak işaretlenen özellikler
bu özelliği kullanabilirsiniz. Genellikle bir özellik yapılandırılamaz çünkü Bazel
bir sorunun nasıl çözüleceğine karar vermeden önce
select()
Bkz. Yapılandırılabilir Derleme Özellikleri'ne göz atın.
Dolaylı çıkış hedefleri
C++'taki örtülü çıkışlar kullanımdan kaldırılmıştır. Lütfen kullanmayın diğer dillerde de ekleyebilirsiniz. Henüz desteğimizi sonlandırmaya yönelik bir yolumuz yok ancak zaman içinde bu sistemlerin de desteği sonlandırılacaktır.
BUILD dosyasında bir derleme kuralı tanımladığınızda
bir pakette yeni ve adlandırılmış kural hedefi tanımlayarak. Birçok derleme kuralı
işlevleri dolaylı olarak bir veya daha fazla çıkış dosyası gerektirir
bir kurala özgüdür.
Örneğin, açıkça bir
java_binary(name='foo', ...)
kural, siz de
çıkış dosyasını dolaylı olarak tanımlama
foo_deploy.jar
adresini aynı paketin üyesi olarak hedefleyin.
(Bu hedef, bağımsız bir Java arşividir.
.)
Dolaylı çıkış hedefleri, Google AdWords'ün
hedef grafiğidir. Tıpkı diğer hedefler gibi, isteğe bağlı olarak oluşturulurlar.
üst düzey derleme komutta belirtildiğinde veya
diğer derleme hedefleri için gerekli önkoşullardır. Bilgilerin
BUILD dosyalarında bağımlılık olarak referans verilir ve
bazel query
gibi analiz araçlarının çıktısı.
Her derleme kuralı türü için kuralın dokümanlarında bir ilgili gizli dokümanların adını ve içeriğini söz konusu kuralın bildirilmesine yol açan çıkışları içerebilir.
Google Ads Temel Düzey
derleme sistemi tarafından kullanılan iki ad alanı bulunur:
etiketler hedefleri,
Bunlar, kurallar veya dosyalar olabilir ve dosya hedefleri,
kaynak (veya giriş) dosya hedefleri ve türetilen (veya çıkış) dosya
belirler. BUILD dosyalarında söyleyebileceğiniz şeyler şunlardır:
komut satırından derlemek veya bazel query
kullanarak incelemek;
bu, hedef ad alanıdır. Her dosya hedefi karşılık gelir
("dosya sistemi ad alanı") içine alır; her kural
hedefi, diskteki sıfır, bir veya daha fazla gerçek dosyaya karşılık gelebilir.
Diskte, karşılık gelen hedefi olmayan dosyalar olabilir; şunun için:
örnek, C++ derlemesi sırasında üretilen .o
nesne dosyaları
öğesine BUILD dosyaları içinden veya komut satırından başvuruda bulunulamaz.
Bu şekilde derleme aracı,
bir fikir edinmiş oldunuz. Bu konu,
BUILD Concept Reference (Konsept Referansı Derleme) başlıklı makaleyi inceleyin.