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ünü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 jeton oluşturmaya tabi olan özellikler, bu dokümanda tanımları
"Make" değişkeni genişletmeye ve Bourne kabuğu dilimlemeye tabi olan özellikler genellikle derleyicilere ve diğer araçlara keyfi seçenekler iletmek için kullanılır. Bu tür özelliklere örnek olarak
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 |
Etiketler listesi; varsayılan değer Bu kuralın çalışma zamanında ihtiyaç duyduğu dosyalar. Dosya veya kural hedeflerini listeleyebilir. Genellikle tüm hedeflere izin verir.
Yeni kurallar işlenirse bir |
deps |
Etiketler listesi; varsayılan değer
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 |
Dize listesi; nonconfig;
varsayılan değer 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 |
Etiket listesi; varsayılan değer
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 |
Etiket listesi;
nonyapılandırabilir; varsayılan değer Varsayılan olarak desteklenen ortamlara ek olarak bu hedefin oluşturulabileceği ortamların listesi. Bu, kullanıcıların hangi hedeflerin birbirine bağlı olabileceğini ve hangilerinin bağlı olamayacağını belirtmesine olanak tanıyan Bazel'in kısıtlama sisteminin bir parçasıdır. Ö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 |
Dize; yapılandırılamaz; varsayılan değer 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. Mesajın gösterilmesini önlemek için hangi değişikliklerin yapılması gerektiğini kolayca anlayabilmeleri amacıyla bir referans (ör. web sayfası, hata numarası veya örnek taşıma CL'leri) eklemek iyi bir fikirdir. 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. Desteği sonlandırılan bir hedef, desteği sonlandırılan başka bir hedefe bağlıysa uyarı mesajı gönderilmez. Kullanıcılar artık uygulamayı kullanmayı bıraktıktan sonra hedef kaldırılabilir. |
distribs |
Dize listesi; nonconfig;
varsayılan değer Bu 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 |
Etiketler listesi;
yapılandırılamaz; varsayılan değer
İş Listesi
|
exec_properties |
Dize sözlüğü; varsayılan değer 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 dizelerinin listesi; varsayılan değer Ö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 |
Etiketler listesi;
yapılandırılamaz; varsayılan değer Ş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 |
Dize listesi; nonconfig;
varsayılan değer
Etiketler herhangi bir kuralda kullanılabilir. Testteki etiketler ve
Bazel, herhangi bir testin veya
Testlerdeki etiketler genellikle bir testin hata ayıklama ve yayınlama sürecinizdeki rolünü açıklamak için kullanılır. 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 |
Etiketler listesi; varsayılan değer
Bu hedefin uyumlu olarak kabul edilmesi için hedef platformda bulunması gereken Geçişli olarak uyumsuz hedeflere bağlı olan hedefler Uyumsuz olarak kabul edilir. Ayrıca derleme ve test için atlanır. Boş bir liste (varsayılan değerdir) hedefin tüm platformlarla uyumlu olduğunu gösterir.
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 |
Boole; nonconfig; varsayılan değer
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. Buna karşılık, normal davranışı koşulsuz olarak geçersiz kıldığı için bağlantı oluşturmak bile tehlikeli olan kurallar kesinlikle testonly olarak işaretlenmelidir. |
toolchains |
Etiket listesi;
nonyapılandırabilir; varsayılan değer
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 |
Etiket listesi;
nonyapılandırabilir;
varsayılan olarak şu değerden
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 |
Dize listesi; $(location) ve "Değişken oluştur" yerine koyma işlemine ve Bourne kabuğu jetonuna tabidir; varsayılan değer Bazel,
Bu bağımsız değişkenler, herhangi bir |
||||||||||||||||||||
env |
Dize sözlüğü; değerleri,
$(location) ve
"Değişken yap" ifadesi; varsayılan değer
Test,
Bu özellik yalnızca |
||||||||||||||||||||
env_inherit |
Dize listesi; varsayılan değer Şu kaynaktan devralınacak ek ortam değişkenlerini belirtir:
test
Bu özellik yalnızca |
||||||||||||||||||||
size |
Dize 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:
Test oluşturulurken |
||||||||||||||||||||
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. Belirtilmemişse zaman aşımı, testin boyutuna göre belirlenir. Test zaman aşımı,
Yukarıdakiler dışındaki zamanlarda, test zaman aşımı
Testi üretirken ortam değişkeni |
||||||||||||||||||||
flaky |
Boole; nonconfig;
varsayılan değer 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ı genellikle önerilmez. İddialar doğru olduğunda testler güvenilir bir şekilde geçmelidir. |
||||||||||||||||||||
shard_count |
Negatif olmayan tam sayı 50'den küçük veya 50'ye eşittir; varsayılan değer Paralel kırık sayısını belirtir kullanmanız gerekir. Bu değer ayarlanırsa
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. Test bölme işlemi etkinse 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 |
Boole; nonconfig;
varsayılan değer Testin, korumalı alan olmadan yerel olarak çalıştırılmasını zorunlu kılar. Bu değerin True olarak ayarlanması, etiket olarak "local" ( |
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 |
Dize listesi; tabi
$(location) ve
"Değişken yap" ifadesini değiştirme ve
Bourne Shell tokenizasyonu;
nonYapılandırılabilir;
varsayılan değer
Bazel'in
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 |
Dize sözlüğü; değerleri,
$(location) ve
"Değişken yap" ifadesi; varsayılan değer Hedef aşağıdaki durumlarda ayarlanacak ek ortam değişkenlerini belirtir:
Bu özellik yalnızca
NOT: Hedefi Bazel dışında çalıştırdığınızda (örneğin, |
output_licenses |
Dize listesi; varsayılan değer 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, örneğin, hedefi birden fazla platform veya derleme modu için özelleştirmek amacıyla kullanılabilir.
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 davranışlarını seçilen dala göre değiştiremez ve bazel query
yalnızca bir hedefin yapılandırılabilir bağımlılıkları hakkında ihtiyatlı tahminler yürütebilir. Görüntüleyin
bu SSS
select()
öğesini kurallar ve makrolarla kullanma hakkında daha fazla bilgi edinin.
Dokümanlarında nonconfigurable
işaretli özellikler bu özelliği kullanamaz. 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ük çıkışlara verilen destek sonlandırıldı. Lütfen kullanmayın diğer dillerde de yapabilirsiniz. Henüz desteği sonlandırılacak bir yolumuz yok ancak bu sürümler de zaman içinde desteği sonlandırılacak.
Bir BUILD dosyasında derleme kuralı tanımladığınızda, pakette açıkça yeni, adlandırılmış bir kural hedefi beyan etmiş olursunuz. 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.
Derleme sistemi tarafından kullanılan iki adlandırma alanı arasında önemli ancak biraz ince bir fark vardır: Etiketler, kural veya dosya olabilecek hedefleri tanımlar. Dosya hedefleri ise kaynak (veya giriş) dosya hedefleri ve türetilmiş (veya çıkış) dosya hedefleri olarak ikiye ayrılabilir. 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.