Bu bölümde, birçok işlev veya derleme kuralında ortak olan çeşitli terim ve kavramları tanımlar.
İç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, Bourne kabuğunun tokenizasyon kurallarına göre birden fazla kelimeye bölünür: Tırnak işareti içinde olmayan boşluklar ayrı kelimeleri sınırlar ve tek ve çift tırnaklı karakterler ile ters eğik çizgiler, belirteçlemeyi önlemek için kullanılır.
Bu tokenizasyona tabi olan özellikler, bu belgedeki tanımlarında bu şekilde açıkça belirtilmiştir.
"Yap" değişken genişletmesine ve Bourne kabuk belirteçleştirmesine tabi özellikler, genellikle rastgele seçenekleri derleyicilere ve diğer araçlara iletmek için kullanılır. Bu tür özelliklere örnek olarak cc_library.copts
ve java_library.javacopts
verilebilir.
Bu ikameler, tek dizeli bir değişkenin yapılandırmaya özel seçenek kelimeleri listesine genişlemesini sağlar.
Etiket genişletme
Çok az sayıda kuralın bazı dize özellikleri, etiket genişletmeye tabidir: Bu dizeler alt dize olarak //mypkg:target
gibi geçerli bir etiket içeriyorsa ve bu etiket geçerli kuralın bildirilen bir ön koşuluysa ilgili hedef
//mypkg:target
ile temsil edilen dosyanın yol adına genişletilir.
genrule.cmd
ve cc_binary.linkopts
, örnek özelliklere örnek olarak verilebilir. Ayrıntılar, göreli etiketlerin genişletilip genişletilmediği ve birden çok dosyaya genişleyen etiketlerin nasıl ele alındığı gibi sorunlara göre her durumda önemli ölçüde farklılık gösterebilir. Ayrıntılı bilgi 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 (hepsi değil) özellikler açıklanmaktadır.
Özellik | Açıklama |
---|---|
data |
Etiket listesi; varsayılan Çalışma zamanında bu kural için gereken dosyalar. Dosya veya kural hedeflerini listeleyebilir. Genellikle tüm hedeflere izin verir.
Yeni kurallar, çalışma zamanında başka girişler kullanabilecek girişleri işlerse bir |
deps |
Etiket listesi; varsayılan
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ılara sahip olanlarla sınırlar.
Bir hedefin
|
licenses |
Dize listesi; yapılandırılabilir olmayan;
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. Bunu kullanmayın. |
srcs |
Etiket listesi; varsayılan
Bu kural tarafından işlenen veya eklenen dosyalar. Genellikle dosyalar doğrudan listelenir ancak varsayılan çıkışlarını dahil etmek için kural hedefleri ( Dile özgü kurallar, genellikle listelenen dosyaların belirli dosya uzantılarına sahip olmasını gerektirir. |
Tüm derleme kurallarında ortak özellikler
Bu bölümde, tüm derleme kurallarına dolaylı olarak eklenen özellikler açıklanmaktadır.
Özellik | Açıklama |
---|---|
compatible_with |
Etiket listesi; yapılandırılabilir olmayan; varsayılan Varsayılan olarak desteklenen ortamların yanı sıra bu hedefin derlenebileceği ortamların listesi. Bu, Bazel'in hangi hedeflerin birbirine bağımlı olabileceğini ve kullanamayacağını bildirmesini sağlayan 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. Ayrıntılar için ConstraintSemantics'i inceleyin. |
deprecation |
Dize; yapılandırılmamış; varsayılan değer Bu hedefle ilişkili açıklayıcı bir uyarı mesajı. Bu genellikle bir hedefin eskidiğini veya başka bir kural tarafından yerini aldığını, bir pakete özel olduğunu ya da herhangi bir nedenle zararlı olduğunu bildirmek için kullanılır. İletiden kaçınmak için hangi değişikliklerin yapılması gerektiğini kolayca bulabilmesi için bir referans (web sayfası, hata numarası veya örnek taşıma CL'leri gibi) 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 yapı oluşturma ş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. Böylece, örneğin, desteği sonlandırılmış bir kuralın testleri oluşturulduğunda bir uyarıyla karşılaşmazsınız. Kullanımdan kaldırılmış bir hedef, kullanımdan kaldı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; yapılandırılabilir olmayan;
varsayılan değer 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. Bunu kullanmayın. |
exec_compatible_with |
Etiket listesi; yapılandırılabilir olmayan; varsayılan
Bu hedef için yürütme platformunda mevcut olması gereken |
exec_properties |
Dize sözlüğü; varsayılan 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 olarak Ö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 |
restricted_to |
Etiket listesi; yapılandırılabilir olmayan; varsayılan Varsayılan olarak desteklenen ortamlar yerine, bu hedefin oluşturulabileceği ortamların listesi.
Bu, Bazel'in kısıtlama sisteminin bir parçasıdır. Ayrıntılar için |
tags |
Dize listesi; yapılandırılabilir olmayan;
varsayılan değer
Etiketler herhangi bir kuralda kullanılabilir. Testteki etiketler ve
Bazel, herhangi bir test veya
Testlerdeki etiketler, genellikle hata ayıklama ve yayınlama sürecinizde testin rolüne ek açıklama eklemek için kullanılır. Etiketler genellikle, herhangi bir çalışma zamanı ek açıklaması özelliğinin bulunmadığı C++ ve Python testleri için yararlıdır. Etiketlerin ve boyut öğelerinin kullanılması, kod tabanı kontrol politikasına dayalı test paketlerinin derlenmesinde esneklik sağlar.
Bazel, test kuralının
|
target_compatible_with |
Etiket listesi; varsayılan
Bu hedefin uyumlu olarak kabul edilmesi için hedef platformda bulunması gereken Geçişli olarak uyumsuz hedeflere bağlı olan hedefler kendileri için uyumsuz olarak kabul edilir. Ayrıca, oluşturma ve test için atlanırlar. Boş liste (varsayılan değerdir), hedefin tüm platformlarla uyumlu olduğunu gösterir.
Workspace Kuralları dışındaki tüm kurallar bu özelliği destekler.
Bazı kurallarda bu özelliğin herhangi bir etkisi yoktur. Örneğin,
Uyumsuz hedef atlama hakkında daha fazla bilgi için Platformlar sayfasına bakın. |
testonly |
Boole; yapılandırılmamış; test ve test paketi hedefleri hariç varsayılan değer
Benzer şekilde,
Testler ( Bu özelliğin amacı, hedefin üretime yayınlanan ikili programlara dahil edilmemesi gerektiğidir. Yalnızca test sürümü çalışma zamanında değil, derleme zamanında uygulandığından ve bağımlılık ağacı üzerinden sanal olarak yayıldığından, mantıklı bir şekilde uygulanmalıdır. Örneğin, birim testleri için yararlı olan saplama ve sahte öğeler, üretime yayınlanacak aynı ikili programları içeren entegrasyon testleri için de yararlı olabilir ve bu nedenle muhtemelen yalnızca test olarak işaretlenmemelidir. Bunun aksine, belki de koşulsuz olarak normal davranışı geçersiz kıldığı için bağlantı oluşturulması bile tehlikeli olan kurallar, kesinlikle yalnızca test amaçlı olarak işaretlenmelidir. |
toolchains |
Etiket listesi; yapılandırılabilir olmayan; varsayılan
Bu hedefin Değişkenleri oluşturma özelliğine erişmesine izin verilen hedef grubu. Bu hedefler,
Bunun, platforma bağlı yapılandırma için kural uygulamaları tarafından kullanılan araç zinciri çözünürlüğü kavramından farklı olduğunu unutmayın. Bir hedefin hangi belirli |
visibility |
Etiket listesi; yapılandırılmamış; belirtilmişse varsayılan olarak paket tarafından
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" değişikliğine ve Bourne kabuk belirtkeleme'ye tabidir. Varsayılan olarak
Bu bağımsız değişkenler, |
||||||||||||||||||||
env |
Dize sözlüğü; değerler $(location) ve "Değişken yap" değişikliğine tabidir; varsayılan olarak
Test,
Bu özellik yalnızca |
||||||||||||||||||||
env_inherit |
Dize listesi; varsayılan değer: 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" veya "çok büyük" olarak kabul edilir. Bazel, Test boyutları, aşağıdaki varsayılan zaman aşımlarına ve varsayılan en yüksek yerel kaynak kullanımlarına karşılık gelir:
Testi üretirken |
||||||||||||||||||||
timeout |
Dize 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 bir testin zaman aşımı süresi bağımsız olarak ayarlanabilir. Açıkça belirtilmediği takdirde zaman aşımı, test 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; nonYapılandırılabilir; varsayılan değer Testi hatalı olarak işaretler. Politika ayarlanırsa testi üç kereye kadar yürütür ve yalnızca her seferinde başarısız olduğu durumlarda testi başarısız olarak işaretler. Varsayılan olarak, bu özellik Yanlış 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. Onayları onaylandığında testler güvenilir bir şekilde geçmelidir. |
||||||||||||||||||||
shard_count |
Negatif olmayan tam sayı 50'den küçük veya 50'ye eşit; varsayılan Testi çalıştırmak için kullanılacak paralel kırık sayısını belirtir. Bu değer ayarlanırsa bu değer, testin yürütüleceği paralel parça sayısını belirlemek için kullanılan tüm buluşsal yöntemleri geçersiz kılar. Bazı test kurallarında, parçalamayı etkinleştirmek için öncelikle bu parametrenin gerekli olabileceğini unutmayın. 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 tüm testleri çalıştırır, bu da sizin istediğiniz şey değildir. Parçalama hakkında ayrıntılı bilgi için Test Ansiklopedisi'nde Test Parçalama bölümüne bakın. |
||||||||||||||||||||
local |
Boole; nonYapılandırılabilir; varsayılan değer Testi, korumalı alana alınmadan yerel olarak çalıştırılmaya zorlar. Bunu Doğru değerine ayarlamak, etiket olarak "yerel" değerini sağlamakla eşdeğerdir ( |
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; $(location) ve "Değişken oluştur" ikameye ve Bourne kabuk belirtecilendirme'ye tabidir; yapılamaz; varsayılan
NOT: Hedefi Bazel dışında çalıştırdığınızda (örneğin, |
env |
Dize sözlüğü; değerler $(location) ve "Değişken yap" değişikliğine tabidir; varsayılan olarak Hedef,
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. Bunu kullanmayın. |
Yapılandırılabilir özellikler
Çoğu özellik "yapılandırılabilir" olduğundan, hedef farklı şekilde oluşturulduğunda bu özelliklerin değerleri değişebilir. Özellikle yapılandırılabilir özellikler, Bazel komut satırına iletilen işaretlere veya hedefi istediği aşağı akış bağımlılığının hangi faktörlere bağlı olarak değişiklik gösterebilir. Örneğin bu, hedefi birden fazla platform veya derleme modu için özelleştirmek amacıyla kullanılabilir.
Aşağıdaki örnekte farklı hedef mimariler için farklı kaynaklar açıklanmaktadır. bazel build :multiplatform_lib --cpu x86
çalıştırıldığında hedef x86_impl.cc
kullanılarak derlenirken --cpu arm
değiştirilirse arm_impl.cc
kullanılır.
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, hedef yapılandırmasının config_setting
veya constraint_value
ölçütlerine göre yapılandırılabilir özellik için farklı alternatif değerler arasından seçim yapar.
Bazel, yapılandırılabilir özellikleri makroları işlendikten sonra ve kuralları işlemeden önce (teknik olarak
yükleme ve analiz aşamaları arasında) değerlendirir.
select()
değerlendirmesinden önceki işlemlerde select()
öğesinin hangi dalı seçtiği bilmez. Örneğin, makrolar seçilen dala göre davranışlarını değiştiremez ve bazel query
, hedefin yapılandırılabilir bağımlılıkları hakkında yalnızca dikkatli tahminlerde bulunabilir. select()
öğesini kurallar ve makrolarla kullanma hakkında daha fazla bilgi için
bu SSS bölümüne bakın.
Dokümanlarında nonconfigurable
olarak işaretlenen özellikler bu özelliği kullanamaz. Genellikle bir özellik yapılandırılamaz. Bunun nedeni, Bazel'in bir select()
sorununun nasıl çözümleneceğini belirleyebilmesi için Bazel'in dahili olarak değerini bilmesi gerekir.
Ayrıntılı bir genel bakış için Yapılandırılabilir Derleme Özellikleri bölümüne bakın.
Dolaylı çıkış hedefleri
C++'taki örtülü çıkışlar kullanımdan kaldırılmıştır. Lütfen mümkünse başka dillerde kullanmaktan kaçının. Henüz bir kullanımdan kaldırma sürecimiz yok, ancak bu araçlar da bir süre sonra kullanımdan kaldırılacak.
DERLEME dosyasında bir derleme kuralı tanımladığınızda, paket içinde de açıkça yeni ve adlandırılmış bir kural hedefi beyan etmiş olursunuz. Birçok derleme kuralı işlevi de dolaylı olarak, içerikleri ve anlamı kurala özgü olan bir veya daha fazla çıkış dosyası hedefi gerektirir.
Örneğin, bir java_binary(name='foo', ...)
kuralını açık bir şekilde bildirdiğinizde, aynı paketin üyesi olarak foo_deploy.jar
çıkış dosyası hedefini dolaylı olarak da bildirmiş olursunuz.
(Bu hedef, dağıtıma uygun bağımsız bir Java arşividir.)
Dolaylı çıkış hedefleri, global hedef grafiğin birinci sınıf üyeleridir. Diğer hedeflerde olduğu gibi bu hedefler de üst düzey derleme komutta belirtildiklerinde veya diğer derleme hedefleri için gerekli ön koşullar olduğunda isteğe bağlı olarak oluşturulur. BUILD dosyalarında bağımlılık olarak değerlendirilebilir ve bazel query
gibi analiz araçlarının çıktısında gözlemlenebilirler.
Her derleme kuralı türü için kuralın dokümanlarında, bu tür bir kuralın bildirilmesiyle ilişkili tüm örtülü çıkışların adlarının ve içeriğinin ayrıntılı olarak açıklandığı özel bir bölüm bulunur.
Derleme sistemi tarafından kullanılan iki ad alanı arasındaki önemli ancak biraz ince bir fark: Etiketler, kural veya dosya olabilecek hedefleri tanımlar ve dosya hedefleri, kaynak (veya giriş) dosya hedefleri ve türetilmiş (veya çıkış) dosya hedeflerine ayrılabilir. Bunlar BUILD dosyalarında belirtebileceğiniz, komut satırından derleyebileceğ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 veya bir veya daha fazla gerçek dosyaya karşılık gelebilir.
Diskte karşılık gelen bir hedefi olmayan dosyalar olabilir. Örneğin, C++ derlemesi sırasında oluşturulan .o
nesne dosyalarına BUILD dosyaları içinden veya komut satırından referans verilemez.
Böylece, derleme aracı işini nasıl yaptığına dair bazı uygulama ayrıntılarını gizleyebilir. Bu konu Derleme Kavram Referansı bölümünde daha kapsamlı bir şekilde açıklanmaktadır.