Bu bölümde, birçok işlev veya derleme kuralında ortak olan çeşitli terimler ve kavramlar tanımlanmaktadır.
İçindekiler
- Bourne shell belirteçleştirme
- Etiket genişletme
- Çoğu derleme kuralı tarafından tanımlanan tipik özellikler
- Tüm derleme kuralları için ortak özellikler
- Tüm test kurallarında ortak olan özellikler (*_test)
- Tüm ikili kurallarda ortak olan özellikler (*_binary)
- Yapılandırılabilir özellikler
- Implicit output targets
Bourne shell'de belirteçlere ayırma
Bazı kuralların belirli dize özellikleri, Bourne kabuğunun belirteçleştirme kurallarına göre birden fazla kelimeye bölünür: Tırnak işareti kullanılmayan boşluklar ayrı kelimeleri sınırlar ve tek ile çift tırnak karakterleri ve ters eğik çizgiler, belirteçleştirme işlemini engellemek için kullanılır.
Bu belirteç oluşturma işlemine tabi olan özellikler, bu dokümandaki tanımlarında açıkça belirtilir.
"Make" değişken genişletme ve Bourne kabuğu belirteçleştirme işlemine tabi olan özellikler genellikle derleyicilere ve diğer araçlara rastgele seçenekler iletmek için kullanılır. Bu tür özelliklere örnek olarak cc_library.copts
ve java_library.javacopts
verilebilir.
Bu ikame işlemleri, tek bir dize değişkeninin yapılandırmaya özel bir seçenek kelimeleri listesine genişlemesine olanak tanır.
Etiket genişletme
Çok az kuralın bazı dize özellikleri etiket genişletmeye tabidir: Bu dizeler, //mypkg:target
gibi bir alt dize olarak geçerli bir etiket içeriyorsa ve bu etiket, geçerli kuralın belirtilmiş bir ön koşuluysa hedef
//mypkg:target
ile temsil edilen dosyanın yol adına genişletilir.
Örnek özellikler arasında genrule.cmd
ve cc_binary.linkopts
yer alır. Ayrıntılar, her durumda önemli ölçüde farklılık gösterebilir. Örneğin, göreli etiketlerin genişletilip genişletilmediği, birden fazla dosyaya genişleyen etiketlerin nasıl işlendiği gibi konularda farklılıklar olabilir. Ayrıntılar için kural özelliği dokümanlarına bakın.
Çoğu derleme kuralı tarafından tanımlanan tipik özellikler
Bu bölümde, birçok derleme kuralı tarafından tanımlanan ancak tümü tarafından tanımlanmayan özellikler açıklanmaktadır.
Özellik | Açıklama |
---|---|
data |
Etiket 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 verilir.
Yeni kurallar, çalışma zamanında diğer girişleri kullanabilecek girişleri işliyorsa |
deps |
Etiket listesi; varsayılan değer
Bu hedefin bağımlılıkları. Genellikle yalnızca kural hedefleri listelenmelidir. (Bazı kurallar, dosyaların doğrudan Dile özgü kurallar genellikle listelenen hedefleri belirli sağlayıcılarla sınırlar.
Bir hedefin
Çoğu zaman, bir |
licenses |
Dizelerin listesi; yapılandırılamaz;
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 parçasıdır. Bunu kullanmayın. |
srcs |
Etiket listesi; varsayılan değer
Bu kural tarafından işlenen veya dahil edilen dosyalar. Genellikle dosyaları doğrudan listeler ancak varsayılan çıkışlarını dahil etmek için kural hedeflerini (ör. Dile özgü kurallar genellikle listelenen dosyaların belirli dosya uzantılarına sahip olmasını gerektirir. |
Tüm derleme kuralları için ortak özellikler
Bu bölümde, tüm derleme kurallarına örtülü olarak eklenen özellikler açıklanmaktadır.
Özellik | Açıklama |
---|---|
aspect_hints |
Etiket listesi; varsayılan değer Yönlere (özellikle bu kuralın ters bağımlılıkları tarafından çağrılan yönler) sunulan ancak bu kuralın kendi uygulamasına sunulmayan rastgele etiketlerin listesi. Belirli bir yön ipucunun ne gibi bir etkisi olacağıyla ilgili ayrıntılar için dile özgü kural kümeleriyle ilgili belgelere bakın. Bir yön ipucunu etiketin daha zengin bir alternatifi olarak düşünebilirsiniz:
Etiket yalnızca bir boole durumu (etiket, Uygulamada, yön ipuçları farklı dile özgü kural kümeleri arasındaki birlikte çalışabilirlik için kullanılır. Örneğin, Somut bir örnek için En iyi uygulamalar:
|
compatible_with |
Etiket listesi;
yapılandırılamaz; varsayılan değer Bu hedefin oluşturulabileceği ortamların listesi (varsayılan olarak desteklenen ortamlar hariç). Bu, Bazel'in kısıtlama sisteminin bir parçasıdır. Bu sistem, kullanıcıların hangi hedeflerin birbirine bağlı olabileceğini ve olamayacağını bildirmesine olanak tanır. Örneğin, harici olarak dağıtılabilir ikili dosyalar, şirket sırrı kodu içeren kitaplıklara bağlı olmamalıdır. Ayrıntılar için ConstraintSemantics başlıklı makaleyi inceleyin. |
deprecation |
Dize; yapılandırılamaz; varsayılan değer Bu hedefle ilişkili açıklayıcı bir uyarı mesajı. Bu genellikle kullanıcıları bir hedefin eski hale geldiği, başka bir kuralın yerini aldığı, bir pakete özel olduğu veya bir nedenden dolayı zararlı olarak kabul edildiği konusunda bilgilendirmek için kullanılır. Mesajın gösterilmesini önlemek için hangi değişikliklerin yapılması gerektiğini kolayca öğrenmek amacıyla bazı referanslar (ör. bir web sayfası, hata numarası veya örnek taşıma CL'leri) eklemeniz önerilir. Eski hedef yerine kullanılabilecek yeni bir hedef varsa eski hedefin tüm kullanıcılarını taşımanız iyi bir fikirdir.
Bu özelliğin, öğelerin oluşturulma şekli üzerinde etkisi yoktur ancak bir derleme aracının teşhis çıkışını etkileyebilir. Derleme aracı, Paket içi bağımlılıklar bu uyarıdan muaftır. Bu nedenle, örneğin, desteği sonlandırılan bir kuralın testlerini oluştururken uyarıyla karşılaşılmaz. Kullanımdan kaldırılan bir hedef, başka bir kullanımdan kaldırılan hedefe bağlıysa uyarı mesajı verilmez. Kullanıcılar özelliği kullanmayı bıraktıktan sonra hedef kaldırılabilir. |
exec_compatible_with |
Etiket listesi;
yapılandırılamaz; varsayılan değer
Bu hedefin varsayılan yürütme grubunun yürütme platformunda bulunması gereken |
exec_group_compatible_with |
Etiket listeleri için dize sözlüğü;
yapılandırılabilir olmayan; varsayılan değer
Belirli bir yürütme grubu için yürütme platformunda bulunması gereken |
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 özelliklerde bulunuyorsa değer hedeften alınır. Anahtarlar, yalnızca belirli bir yönetici grubuna uygulanmak üzere bir yürütme grubunun adıyla başlayıp ardından |
features |
Özellik dizelerinin listesi; varsayılan değer Özellik, bir hedefte etkinleştirilebilen veya devre dışı bırakılabilen dize etiketidir. Bir özelliğin anlamı, kuralın kendisine bağlıdır. Bu |
package_metadata |
Etiketler listesi;
yapılandırılamaz; varsayılan değer paketin
Bu hedefle ilgili meta verilerle ilişkilendirilmiş etiketlerin listesi. Etiketler genellikle sabit değerler döndüren basit kurallardır. Kurallar ve yönler, derleme grafiğinde bazı ek analizler yapmak için bu etiketleri kullanabilir.
Standart kullanım alanı rules_license'tır.
Bu kullanım alanında, |
restricted_to |
Etiket listesi;
yapılandırılamaz; varsayılan değer Bu hedefin oluşturulabileceği ortamların listesi, varsayılan olarak desteklenen ortamlar yerine.
Bu, Bazel'in kısıtlama sisteminin bir parçasıdır. Ayrıntılar için
|
tags |
Dizelerin listesi; yapılandırılamaz;
varsayılan değer
Etiketler herhangi bir kuralda kullanılabilir. Test ve
Bazel, herhangi bir testin veya
Testlerdeki etiketler genellikle testin hata ayıklama ve yayınlama sürecinizdeki rolünü açıklamak için kullanılır. Etiketler genellikle, herhangi bir çalışma zamanı ek açıklama özelliği bulunmayan C++ ve Python testlerinde en kullanışlıdır. Etiketlerin ve boyut öğelerinin kullanılması, kod tabanı check-in politikasına dayalı test paketlerinin oluşturulmasında esneklik sağlar.
Bazel, test kuralının
|
target_compatible_with |
Etiket listesi; varsayılan değer
Bu hedefin uyumlu olarak kabul edilmesi için hedef platformda bulunması gereken
Uyumsuz hedeflere geçişli olarak bağlı olan hedefler de uyumsuz kabul edilir. Ayrıca derleme ve test için de atlanır. Boş bir liste (varsayılan değer) hedefin tüm platformlarla uyumlu olduğunu gösterir.
Workspace kuralları dışındaki tüm kurallar bu özelliği destekler.
Bu özellik, bazı kurallar için geçerli değildir. Örneğin,
Uyumsuz hedef atlama hakkında daha fazla bilgi için Platformlar sayfasına bakın. |
testonly |
Boole değeri; yapılandırılamaz; test ve test paketi hedefleri hariç varsayılan değer
Benzer şekilde,
Testler ( Bu özellik, hedefin üretime sunulan ikili dosyalarda yer almaması gerektiğini belirtir. testonly, çalışma zamanında değil derleme zamanında zorunlu kılındığı ve bağımlılık ağacında viral olarak yayıldığı için dikkatli bir şekilde uygulanmalıdır. Örneğin, birim testleri için yararlı olan sahte nesneler ve taklitler, üretime yayınlanacak aynı ikili dosyaları içeren entegrasyon testleri için de yararlı olabilir. Bu nedenle, muhtemelen yalnızca test için olarak işaretlenmemelidir. Aksine, normal davranışı koşulsuz olarak geçersiz kıldığı için bağlantı oluşturmanın bile tehlikeli olduğu kurallar kesinlikle testonly olarak işaretlenmelidir. |
toolchains |
Etiket listesi;
yapılandırılamaz; varsayılan değer
Bu hedefin Değişken oluştur özelliğine erişmesine izin verilen hedef grubu. Bu hedefler,
Bunun, platforma bağlı yapılandırma için kural uygulamalarında kullanılan araç zinciri çözümü kavramından farklı olduğunu unutmayın. Bu özelliği, bir hedefin hangi |
visibility |
Etiket listesi; yapılandırılamaz; varsayılan değer değişir
Doğrudan bir BUILD dosyasında veya bir BUILD dosyasından çağrılan eski makrolarda bildirilen hedefler için varsayılan değer, belirtilmişse paketin |
Tüm test kuralları için ortak özellikler (*_test)
Bu bölümde, tüm test kuralları için ortak olan özellikler açıklanmaktadır.
Özellik | Açıklama | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
args |
Dizelerin listesi; $(location) ve "Make variable" yerine koyma ve Bourne shell belirteçleştirme işlemine tabidir; varsayılan değer Bazel'in
Bu bağımsız değişkenler, |
||||||||||||||||||||
env |
Dizeler sözlüğü; değerler $(location) ve "Make variable" yerine koyma işlemine tabidir; varsayılan değer
Test
Bu özellik yalnızca |
||||||||||||||||||||
env_inherit |
Dizelerin listesi; varsayılan değer
Bu özellik yalnızca |
||||||||||||||||||||
size |
Dize Bir test hedefinin "ağırlığını" (çalışması için ne kadar süre/kaynak gerektiği) belirtir. Birim testleri "küçük", entegrasyon testleri "orta", uçtan uca testler ise "büyük" veya "çok büyük" olarak kabul edilir. Bazel, varsayılan bir zaman aşımı süresini belirlemek için boyutu kullanır. Bu süre, Test boyutları aşağıdaki varsayılan zaman aşımlarına ve varsayılan en yüksek yerel kaynak kullanımına karşılık gelir:
Test oluşturulurken |
||||||||||||||||||||
timeout |
Dize Testin dönmeden önce ne kadar süre çalışması bekleniyor?
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 göre belirlenir. Test zaman aşımı,
Yukarıda belirtilenler dışındaki zamanlarda, test zaman aşımı
Test oluşturulurken |
||||||||||||||||||||
flaky |
Boole; yapılandırılamaz;
varsayılan değer Testi güvenilir olmayan olarak işaretler. Ayarlanmışsa testi en fazla üç kez çalıştırır ve yalnızca her seferinde başarısız olursa başarısız olarak işaretler. Bu özellik varsayılan olarak False değerine ayarlanır ve test yalnızca bir kez yürütülür. Bu özelliğin kullanılmasının genellikle önerilmediğini unutmayın. Testler, onayları karşılandığında güvenilir bir şekilde başarılı olmalıdır. |
||||||||||||||||||||
shard_count |
50'den küçük veya 50'ye eşit, negatif olmayan tam sayı; varsayılan değer Testi çalıştırmak için kullanılacak paralel parça sayısını belirtir. Bu değer ayarlanırsa testin çalıştırılacağı paralel parça sayısını belirlemek için kullanılan tüm sezgisel yöntemleri geçersiz kılar. Bazı test kurallarında, bu parametrenin parçalama özelliğini etkinleştirmek için gerekli olabileceğini unutmayın. Ayrıca Test parçalama etkinleştirilirse test oluşturulurken 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çadaki her testi çalıştırır. Bu da sizin istediğiniz bir durum değildir. Parçalama hakkında ayrıntılı bilgi için Test Ansiklopedisi'ndeki Test Parçalama bölümüne bakın. |
||||||||||||||||||||
local |
Boole; yapılandırılamaz;
varsayılan değer Testin korumalı alan olmadan yerel olarak çalıştırılmasını zorlar. Bu ayarı True olarak belirlemek, etiket olarak "local" ( |
Tüm ikili kurallar için ortak özellikler (*_binary)
Bu bölümde, tüm ikili kurallar için ortak olan özellikler açıklanmaktadır.
Özellik | Açıklama |
---|---|
args |
Dizelerin listesi; $(location) ve "Make variable" yerine koyma ve Bourne shell tokenization'a tabidir;
nonconfigurable;
varsayılan değer
Bazel'in,
NOT: Hedefi Bazel dışında çalıştırdığınızda (örneğin, ikiliyi |
env |
Dize sözlüğü; değerler $(location) ve "Make variable" yerine geçme işlemine tabidir; varsayılan değer Hedef
Bu özellik yalnızca
NOT: Hedefi Bazel dışında çalıştırdığınızda (ör. ikiliyi |
output_licenses |
Dizelerin listesi; varsayılan değer Bu ikilinin oluşturduğu çıkış dosyalarının lisansları. Bu, Bazel'in artık kullanmadığı, desteği sonlandırılmış bir lisanslama API'sinin parçasıdır. Bunu kullanmayın. |
Yapılandırılabilir özellikler
Çoğu özellik "yapılandırılabilir"dir. Bu, hedefin farklı şekillerde oluşturulması durumunda değerlerinin değişebileceği anlamına gelir. Daha net bir ifadeyle, yapılandırılabilir özellikler; Bazel komut satırına iletilen işaretlere veya hedefi isteyen aşağı akış bağımlılığına göre değişebilir. Bu özellik, örneğin birden fazla platform veya derleme modu için hedefi özelleştirmek üzere kullanılabilir.
Aşağıdaki örnekte, farklı hedef mimariler için farklı kaynaklar tanımlanmaktadır. bazel build :multiplatform_lib --cpu x86
komutunu çalıştırmak, x86_impl.cc
kullanarak hedefi oluşturur. --cpu arm
yerine geçirmek ise arm_impl.cc
kullanılması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,
yapılandırılabilir bir özelliğin farklı alternatif değerleri arasından, hedef yapılandırmanın hangi config_setting
veya constraint_value
ölçütlerini karşıladığına göre seçim yapar.
Bazel, makroları işledikten ve kuralları işlemeden önce (teknik olarak
yükleme ve analiz aşamaları arasında) yapılandırılabilir özellikleri değerlendirir.
select()
değerlendirmesinden önceki tüm işlemler, select()
'nın hangi dalı seçeceğini bilmez. Örneğin, makrolar seçilen dala göre davranışlarını değiştiremez ve bazel query
yalnızca bir hedefin yapılandırılabilir bağımlılıkları hakkında ihtiyatlı tahminler yapabilir. Kurallar ve makrolarla select()
kullanma hakkında daha fazla bilgi için
bu SSS sayfasını inceleyin.
Dokümanlarında nonconfigurable
ile işaretlenen özellikler bu özelliği kullanamaz. Genellikle bir özellik, Bazel'in select()
nasıl çözüleceğini belirleyebilmesi için değerini dahili olarak bilmesi gerektiğinden yapılandırılamaz.
Ayrıntılı genel bakış için Yapılandırılabilir Derleme Özellikleri başlıklı makaleyi inceleyin.
Örtülü çıkış hedefleri
C++'taki örtülü çıkışlar desteği sonlandırıldı. Mümkün olduğunda lütfen diğer dillerde kullanmaktan kaçının. Henüz desteği sonlandırma yolumuz olmasa da bu işlevlerin de desteği sonlandırılacaktır.
Bir BUILD dosyasında derleme kuralı tanımladığınızda, bir pakette yeni ve adlandırılmış bir kural hedefi açıkça bildirmiş olursunuz. Birçok derleme kuralı işlevi, içerikleri ve anlamları kurala özgü olan bir veya daha fazla çıkış dosyası hedefi de örtülü olarak içerir.
Örneğin, bir java_binary(name='foo', ...)
kuralını açıkça bildirdiğinizde aynı paketin üyesi olarak bir çıkış dosyası hedefi foo_deploy.jar
de örtülü olarak bildirmiş olursunuz.
(Bu hedef, dağıtıma uygun bağımsız bir Java arşividir.)
Örtülü çıkış hedefleri, genel hedef grafiğin birinci sınıf üyeleridir. Diğer hedefler gibi bunlar da talep üzerine oluşturulur. Ya üst düzey derleme komutunda belirtildiklerinde ya da diğer derleme hedefleri için gerekli ön koşullar olduklarında oluşturulur. Bunlara BUILD dosyalarında bağımlılık olarak başvurulabilir ve bazel query
gibi analiz araçlarının çıktısında gözlemlenebilir.
Her tür derleme kuralı için kuralın dokümanlarında, bu tür bir kuralın beyanıyla ilgili tüm örtülü çıkışların adlarını ve içeriklerini ayrıntılı olarak açıklayan özel bir bölüm bulunur.
Derleme sistemi tarafından kullanılan iki ad alanı arasında önemli ancak biraz ince bir ayrım vardır:
Etiketler, kural veya dosya olabilen hedefleri tanımlar ve dosya hedefleri kaynak (veya giriş) dosyası hedefleri ile türetilmiş (veya çıkış) dosyası hedefleri olarak ikiye ayrılabilir. Bunlar, BUILD dosyalarında bahsedebileceğiniz, komut satırından oluşturabileceğiniz veya bazel query
kullanarak inceleyebileceğiniz şeylerdir. Bu, hedef ad alanıdır. Her dosya hedefi, diskteki gerçek bir dosyaya (dosya sistemi ad alanı) karşılık gelir. 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. Örneğin, C++ derlemesi sırasında oluşturulan .o
nesne dosyalarına BUILD dosyalarından veya komut satırından referans verilemez.
Bu şekilde, derleme aracı işini nasıl yaptığıyla ilgili belirli uygulama ayrıntılarını gizleyebilir. Bu konu, BUILD Concept Reference'ta daha ayrıntılı olarak açıklanmaktadır.