Bu bölümde, birçok işlev veya derleme kuralında ortak olan çeşitli terimler ve kavramlar tanımlanmaktadı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 olan özellikler (*_test)
- Tüm ikili kurallarda ortak özellikler (*_binary)
- Yapılandırılabilir özellikler
- Yarı açık çıkış hedefleri
Bourne kabuk belirteçleme
Bazı kuralların belirli dize özellikleri, Bourne kabuğunun dize bölme kurallarına göre birden çok kelimeye bölünür: Tek tırnak içine alınmamış boşluklar ayrı kelimeleri sınırlandırır ve dize bölme işlemini önlemek için tek ve çift tırnak karakterleri ile ters eğik çizgiler kullanılır.
Bu tokenizasyona tabi olan özellikler, bu belgedeki tanımlarında bu şekilde açıkça belirtilmiştir.
"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
verilebilir.
Bu ikameler birlikte, tek bir dize değişkeninin yapılandırmaya özgü bir seçenek kelimeleri listesine genişlemesine olanak tanır.
Etiket genişletme
Çok az sayıda kuralın bazı dize özellikleri etiket genişletmesine tabidir: Bu dizeler, alt dize olarak geçerli bir etiket (ör. //mypkg:target
) içeriyorsa ve bu etiket geçerli kuralın tanımlanmış bir ön koşuluysa hedef //mypkg:target
ile temsil edilen dosyanın yol adı olarak genişletilir.
Örnek özellikler arasında genrule.cmd
ve cc_binary.linkopts
yer alır. Ayrıntılar, her durumda önemli ölçüde değişiklik gösterebilir. Örneğin, göreli etiketlerin genişletilip genişletilmeyeceği, birden fazla dosyaya genişleyen etiketlerin nasıl ele alınacağı vb. konularla ilgili 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 (hepsi değil) özellikler açıklanmaktadır.
Özellik | Açıklama |
---|---|
data |
Etiket listesi; varsayılan Bu kuralın çalışma zamanında ihtiyaç duyduğu dosyalar. Dosya veya kural hedeflerini listeleyebilir. Genellikle tüm hedeflere izin verir.
Yeni kurallar, çalışma zamanında diğer girişleri 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ı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 bir parçasıdır. Bunu kullanmayın. |
srcs |
Etiketler listesi; varsayılan değer
Bu kural tarafından işlenen veya dahil edilen 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 |
Etiketler listesi;
yapılandırılamaz; 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ğımlı olabileceğini ve hangilerine bağlı olamayacağını beyan etmesini sağlayan Bazel'ın 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ılabilir değil; 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, derleme şekli üzerinde 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. 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; yapılandırılamaz;
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. 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 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 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ı, test paketlerinin kod tabanı kontrol politikasına göre 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 Uyumsuz hedeflere geçişli olarak bağlı olan hedeflerin kendisi de uyumsuz olarak kabul edilir. Ayrıca derleme ve test için atlanır. 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.
Bu özellik bazı kurallar için etkili değildir. Örneğin,
Uyumlu olmayan hedef atlama hakkında daha fazla bilgi için Platformlar sayfasına bakın. |
testonly |
Boole; yapılandırılamaz; test ve test grubu hedefleri hariç varsayılan değer
Benzer şekilde,
Testler ( Bu özelliğin amacı, hedefin üretime sunulan ikili dosyalarda bulunmaması gerektiğidir. testonly, çalışma zamanında değil derleme zamanında uygulanır ve bağımlılık ağacında viral olarak yayılır. Bu nedenle, testonly dikkatli 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. 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; yapılandırılabilir olmayan; varsayılan
Bu hedefin Değişken oluştur işlevine 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ı için 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, |
||||||||||||||||||||
env |
Dize dizini; değerler $(location) ve "Değişken oluştur" yerine koyma işlemine tabidir; varsayılan değer
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ı" belirtir: Çalıştırılması için ne kadar süreye/kaynağa ihtiyaç duyulur? Birim testleri "küçük", entegrasyon testleri "orta" ve uçtan uca testler "büyük" veya "devasa" olarak kabul edilir. Bazel, varsayılan 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ımlarına karşılık gelir:
Testi üretirken |
||||||||||||||||||||
timeout |
Testin sonuç döndürmeden önce ne kadar süre çalışacağı.
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ıdakilerden farklı zamanlarda, test zaman aşımı Testi üretirken ortam değişkeni |
||||||||||||||||||||
flaky |
Boole; yapılandırılamaz;
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 False olarak ayarlanır ve test yalnızca bir kez çalıştırılır. Bu özelliğin kullanılması genellikle önerilmez. İddialar doğru olduğunda testler güvenilir bir şekilde geçmelidir. |
||||||||||||||||||||
shard_count |
50'den küçük veya 50'ye eşit pozitif 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 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ı için, parçalamayı etkinleştirmek amacıyla öncelikle bu parametrenin gerekli olabileceğini unutmayın. Ayrıca bkz. Test bölme işlemi etkinse Parçalama için test çalıştırıcının test parçalama protokolünü desteklemesi gerekir. Aksi takdirde, büyük olasılıkla her testi her parçada çalıştırır. Bu da istediğiniz şey 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ılmamış; 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 olan özellikler (*_binary)
Bu bölümde, tüm ikili kurallarda 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; yapılandırılamaz; varsayılan değer
Bazel'in
NOT: Hedefi Bazel dışında çalıştırdığınızda (örneğin, |
env |
Dize sözlüğü; değerler $(location) ve "Değişken oluştur" yerine koyma işlemine tabidir; varsayılan değer 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"dir. Yani hedef farklı şekillerde oluşturulduğunda değerleri değişebilir. Özellikle, yapılandırılabilir özellikler Bazel komut satırına iletilen işaretlere veya hedefin alt akıştaki bağımlılığından gelen isteğe bağlı olarak değişebilir. Örneğin bu, hedefi birden fazla platform veya derleme modu için özelleştirmek amacıyla kullanılabilir.
Aşağıdaki örnekte, farklı hedef mimarileri için farklı kaynaklar belirtilmektedir. 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şledikten sonra ve kuralları işlemeden önce (teknik olarak loading ve analysis aşamaları arasında) değerlendirir.
select()
değerlendirmesinden önceki işlemler, select()
'nin hangi dalı seçtiğini 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
işaretli özellikler bu özelliği kullanamaz. Bazel, bir select()
değerini nasıl çözeceğini belirlemeden önce değerini dahili olarak bilmesi gerektiğinden, genellikle özellikler yapılandırılamaz.
Ayrıntılı bir genel bakış için Yapılandırılabilir Derleme Özellikleri başlıklı makaleyi inceleyin.
Dolaylı çıkış hedefleri
C++'taki örtük çıkışlara verilen destek sonlandırıldı. Lütfen mümkünse başka dillerde kullanmaktan kaçının. Henüz desteği sonlandırılma planımız yok ancak bu sürümler de zaman içinde desteği sonlandı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, içeriği ve anlamı kurala özgü olan bir veya daha fazla çıkış dosyası hedefini dolaylı olarak da içerir.
Örneğin, bir java_binary(name='foo', ...)
kuralını açık bir şekilde bildirdiğinizde, çıkış dosyası hedefini foo_deploy.jar
aynı paketin üyesi olarak dolaylı olarak da bildirmiş olursunuz.
(Bu hedef, dağıtıma uygun, kendi kendine yeten bir Java arşividir.)
Dolaylı çıkış hedefleri, global hedef grafiğin birinci sınıf üyeleridir. Diğer hedefler gibi, bunlar da üst düzey derleme komutunda belirtildiğinde 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 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. 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 hedefi olmayan dosyalar olabilir. Örneğin, C++ derlemesi sırasında üretilen .o
nesne dosyalarına BUILD dosyalarından veya komut satırından referans verilemez.
Bu sayede derleme aracı, görevini nasıl yerine getirdiğiyle ilgili belirli uygulama ayrıntılarını gizleyebilir. Bu konu Derleme Kavram Referansı bölümünde daha kapsamlı bir şekilde açıklanmıştır.