- Kullanım
- Önceden tanımlanmış değişkenler
- Önceden tanımlanmış genrule değişkenleri
- Önceden tanımlanmış kaynak/çıktı yolu değişkenleri
- Özelleştirilebilen değişkenler
"Make" değişkenleri, ""Make değişkeni" yerine koymaya tabi" olarak işaretlenmiş özelliklerde kullanılabilen genişletilebilir dize değişkenlerinin özel bir sınıfıdır.
Bunlar, örneğin, kullanıcı tarafından oluşturulan derleme işlemlerine belirli araç zinciri yolları eklemek için kullanılabilir.
Bazel, tüm reklamverenler tarafından kullanılabilen önceden tanımlanmış hedefleri ve bağımlılık hedeflerinde tanımlanan özel değişkenleri ve yalnızca onlara bağımlı olan hedefler tarafından kullanılabilir.
"Yap" teriminin nedeni tarihseldir: söz diziminin ve anlamının bu değişkenlerin başlangıçta GNU ile Oluştur'u tıklayın.
Kullan
""Make değişkeni" yerine koymaya tabidir" olarak işaretlenen özellikler, "Make" değişkenine FOO
aşağıdaki gibi referans verebilir:
my_attr = "prefix $(FOO) suffix"
Yani $(FOO)
ile eşleşen tüm alt dizeler genişletilir
FOO
değerine ayarlayın. Bu değer "bar"
ise son
dize şu hale gelir:
my_attr = "prefix bar suffix"
FOO
, tüketen kullanıcı tarafından bilinen bir değişkene karşılık gelmiyorsa
Bazel bir hata vererek başarısız olur.
Adları harf olmayan sembollerden oluşan "Make" değişkenlerine (ör. @
) parantez olmadan yalnızca dolar işareti kullanılarak da referans verilebilir. Örneğin:
my_attr = "prefix $@ suffix"
$
değerini bir dize sabit değeri olarak yazmak (ör. değişkeni önlemek amacıyla)
genişletme) için $$
yazın.
Önceden tanımlanmış değişkenler
Önceden tanımlanmış "Make" değişkenlerine, herhangi bir hedefte "Make değişkeni yerine koyma işlemine tabi" olarak işaretlenmiş herhangi bir özellik tarafından referans verilebilir.
Bu değişkenlerin listesini ve belirli bir derleme seçenekleri grubu için değerlerini görmek üzere
bazel info --show_make_env [build options]
ve büyük harflerle yazılmış üstteki çıkış satırlarına bakın.
Önceden tanımlanmış değişken örneğine bakın.
Araç seti seçenek değişkenleri
COMPILATION_MODE
:fastbuild
,dbg
veyaopt
. (daha fazla bilgi)
Yol değişkenleri
-
BINDIR
: Hedef için oluşturulan ikili ağacın tabanı bahsedeceğim.sırasında çalışan programlar için farklı bir ağacın kullanılabileceğini kullanarak çapraz derlemeyi desteklemek için ana makine mimarisini geliştirebilirsiniz.
Bir
genrule
içinden bir araç çalıştırmak istiyorsanız yolunu almanın önerilen yolu$(execpath toolname)
'dur. Bu yöntemde toolname,genrule
'nintools
özelliğinde listelenmelidir. GENDIR
: Hedef mimari için oluşturulan kod ağacının tabanı.
Makine mimarisi değişkenleri
-
TARGET_CPU
: Hedef mimarinin CPU'su (ör.k8
).
Önceden tanımlanmış genrule değişkenleri
Aşağıdakiler, genrule
öğesinin cmd
özelliği için özel olarak kullanılabilir ve genellikle bu özelliğin çalışması için önemlidir.
Önceden tanımlanmış genel değişkenlerin bir örneğine bakın.
OUTS
:genrule
adlı grubunouts
listesi. Mevcut yalnızca bir çıkış dosyası varsa$@
kullanabilirsiniz.-
SRCS
:genrule
'unsrcs
listesi (veya daha net bir ifadeyle:srcs
listesindeki etiketlere karşılık gelen dosyaların yol adları). Yalnızca bir kaynak dosyanız varsa$<
öğesini de kullanabilirsiniz. -
<
: Tek bir dosyaysaSRCS
. Aksi takdirde bir derleme hatası tetiklenir. -
@
: Tek bir dosyaysaOUTS
. Aksi takdirde derleme hatası. -
RULEDIR
: Hedefin çıkış dizini, yani hedefi içeren paketin adına karşılık gelen dizin "genfiles
veyabin
ağacı altında. Örneğin,//my/pkg:my_genrule
bu her zamanmy/pkg
ile biter, Hatta//my/pkg:my_genrule
ürününün çıkışları alt dizinlerde olsa bile geçerlidir. -
@D
: Çıkış dizini. Çıkışlar parametresinde tek bir giriş varsa bu parametre, söz konusu dosyayı içeren dizine genişletilir. Birden fazla girişi varsa bu, tüm çıkış dosyaları aynı alt dizinde olsa bile paketingenfiles
ağacındaki kök dizine genişler.Not:
RULEDIR
daha basit bir semantike sahip olduğundan ve çıkış dosyalarının sayısından bağımsız olarak aynı şekilde davrandığından@D
yerineRULEDIR
kullanın.Genrule'ın geçici ara dosyalar oluşturması gerekiyorsa (örneğin veya derleyici gibi başka bir aracın kullanılması sonucunda ortaya çıkıyorsa) bunları
@D
adresine yaz (yine de/tmp
, yazın) ve bitirmeden önce bunları kaldırın.Özellikle giriş içeren dizinlere yazmamaya çalışın. Açık olabilir salt okunur dosya sistemleridir. Aksi takdirde, kaynak ağacı çöpe atılır.
Önceden tanımlanmış kaynak/çıkış yolu değişkenleri
Önceden tanımlanmış execpath
, execpaths
değişkenleri
rootpath
, rootpaths
, location
ve
locations
, etiket parametrelerini (ör. $(execpath
//foo:bar)
) alır ve bu etiketle belirtilen dosya yollarının yerine geçer.
Kaynak dosyalar için bu, Workspace kök dosyanıza göre belirlenen yoldur. Kuralların çıkışı olan dosyalar için bu, dosyanın çıktı yoludur (aşağıdaki çıktı dosyaları açıklamasına bakın).
Önceden tanımlanmış yol değişkenleriyle ilgili bir örneği inceleyin.
-
execpath
: execroot çalıştırması için bir örnek oluşturabilirsiniz.Yukarıdaki örnekte Bazel, bağlı dizindeki tüm derleme işlemlerini çalıştırır. çalışma alanı kökünüzdeki
bazel-myproject
sembolik bağlantısı tarafından. İlgili içeriği oluşturmak için kullanılanempty.source
adlı kaynak dosya yola bağlıbazel-myproject/testapp/empty.source
. Dolayısıyla, yürütme yolu (kökün altındaki alt yol)testapp/empty.source
'tür. Bu, derleme işlemlerinin dosyayı bulmak için kullanabileceği yoldur.Çıkış dosyaları benzer şekilde hazırlanır ancak aynı zamanda alt yolun önekine de sahiptir
bazel-out/cpu-compilation_mode/bin
(veya araçlar:bazel-out/cpu-opt-exec-hash/bin
). Yukarıdaki örnekte,//testapp:app
,show_app_output
adlı kullanıcınıntools
özelliği. Dolayısıyla çıkış dosyasıapp
,bazel-myproject/bazel-out/cpu-opt-exec-hash/bin/testapp/app
. Dolayısıyla yönetici yolubazel-out/cpu-opt-exec-hash/bin/testapp/app
şeklindedir. Bu ekstra önek Örneğin iki farklı CPU için aynı hedefi birbirine engel olmadan aynı derlemeyiBu değişkene iletilen etiket tam olarak bir dosyayı temsil etmelidir. Kaynak dosyalarını temsil eden etiketler için bu durum otomatik olarak doğrudur. Etiketler için kuralının tam olarak bir çıkış oluşturması gerekir. Bu false veya etiket bozuksa derleme bir hatayla başarısız olur.
-
rootpath
: Derlenmiş bir ikili dosyanın, ana depoya karşılık gelen çalıştırma dosyaları dizininin alt dizine göre çalışma zamanında bağımlılık bulmak için kullanabileceği yolu belirtir. Not: Bu yöntem yalnızca--enable_runfiles
etkinse çalışır. Windows'da bu özellik varsayılan olarak etkin değildir. Şunun için bunun yerinerlocationpath
kullanın: destek alın.Bu,
execpath
etiketine benzer ancak yapılandırmayı kaldırır önekleridir. Yukarıdaki örnekte bu, hemempty.source
hem deapp
'ün,testapp/empty.source
vetestapp/app
olmak üzere yalnızca çalışma alanına göreli yollar kullandığı anlamına gelir.Harici bir depodaki dosyanın
rootpath
değerirepo
,../repo/
ile başlar ve depoya göreli yol ile devam eder.Bu,
execpath
ile aynı "yalnızca bir çıkış" koşullarına sahiptir. -
rlocationpath
: Derlenmiş bir ikili dosyanın, çalışma zamanında bir bağımlılık bulmak için runfiles kütüphanesininRlocation
işlevine iletebildiği yol. Bu yol, runfiles dizininde (varsa) veya runfiles manifest'ini kullanarak bulunabilir.Bu,
rootpath
özelliğine benzer, çünkü içermemesi ön ekleriyle başlar, ancak her zaman seçeceğim. Yukarıdaki örnekte bu,empty.source
veapp
değerlerinin şu şekilde sonuçlandığı anlamına gelir: yollar:myproject/testapp/empty.source
vemyproject/testapp/app
.Harici bir depodaki dosyanın
rlocationpath
öğesirepo
,repo/
ile başlayacak ve ardından depoya bağlı yolunu izler.Bu yolu bir ikili dosyaya iletmek ve runfiles kitaplıklarını kullanarak dosya sistemi yoluna çözümlemek, bağımlılıkların çalışma zamanında bulunması için tercih edilen yaklaşımdır.
rootpath
ile karşılaştırıldığında, runfiles dizini mevcut olmasa bile tüm platformlarda çalışabilmesi avantajı vardır.Bu öğede aynı "yalnızca bir çıkış" bulunur
execpath
olarak kabul edersiniz. -
location
: Genişletilen özelliğe bağlı olarakexecpath
veyarootpath
için eş anlamlı bir terimdir. Bu, Starlark öncesi eski bir davranıştır ve belirli bir kural için ne yaptığını gerçekten bilmediğiniz sürece önerilmez. Ayrıntılar için #2475
execpaths
, rootpaths
, rlocationpaths
ve locations
, sırasıyla execpath
, rootpath
, rlocationpaths
ve location
'nin çoğul varyasyonlarıdır. Birden fazla çıkış üreten etiketleri destekler. Bu durumda her çıkış, boşlukla ayrılarak listelenir. Sıfır çıkış kuralları ve bozuk
etiketler yapı hataları oluşturur.
Referans verilen tüm etiketler, tüketen hedefin srcs
, çıkış dosyalarında veya deps
'te görünmelidir. Aksi takdirde derleme başarısız olur. C++ hedefleri
data
içindeki etiketlere de başvuruyor.
Etiketlerin standart biçimde olması gerekmez: foo
, :foo
ve //somepkg:foo
kullanılabilir.
Özelleştirilebilen değişkenler
Özel "Marka" değişkenlerine, "'Değişken oluştur' konusuyla ilgili yalnızca bu filtrenin kullanıldığı hedeflerde bu değişkenleri tanımlayan diğer hedeflere bağlıdır.
En iyi uygulama olarak, temel Bazel'e dahil edilmeleri için gerçekten iyi bir neden olmadığı sürece tüm değişkenler özel olmalıdır. Bu, Bazel'i yükleme zahmetinden kurtarır yüksek maliyetli bağımlılıklar yaratabilir. önem vermez.
C++ araç zinciri değişkenleri
Aşağıdakiler C++ araç zinciri kurallarında tanımlanır ve toolchains =
["@bazel_tools//tools/cpp:current_cc_toolchain"]
değerini ayarlayan tüm kurallar tarafından kullanılabilir. java_binary
gibi bazı kurallar, kural tanımlarında C++ araç zincirini dolaylı olarak içerir. Bu değişkenler otomatik olarak devralınır.
Yerleşik C++ kuralları, "derleyiciyi şurada çalıştırmaya kıyasla çok daha karmaşıktır: . *SAN, ThinLTO gibi çeşitli derleme modlarını desteklemek için aynı anda dikkatlice optimize edilmiş ikili programları, birden çok platformda testler çalışırsa yerleşik kurallar size çok iyi sonuç verir. giriş, çıkış ve komut satırı işaretlerinin doğru ayarlandığından emin olmak için uzunluklarını ayarlayın. dahili olarak oluşturulmuş birden fazla işlemin her birinde Google Analytics'i kullanabilirsiniz.
Bu değişkenler, bir dili kullanan dil uzmanları tarafından nadiren kullanılır. Bunları kullanmak istiyorsanız lütfen önce Bazel geliştiricileriyle iletişime geçin.
ABI
: C++ ABI sürümü.-
AR
: "ar" komutudur. -
C_COMPILER
: C/C++ derleyici tanımlayıcısıdır (ör.llvm
). -
CC
: C ve C++ derleyici komutu.CC_FLAGS
'ü her zamanCC
ile birlikte kullanmanızı önemle Aksi takdirde tüm risk size aittir. CC_FLAGS
: C/C++ derleyicisinin genrules tarafından kullanılabilmesi için gereken minimum işaret grubu. Bu, özellikle deCC
birden fazla özelliği destekliyorsa doğru mimariyi seçin inceleyebilirsiniz.-
NM
: crosstool'daki "nm" komutu. -
OBJCOPY
: C/C++ ile aynı paketteki objcopy komutu derleyici olarak da adlandırılır. -
STRIP
: C/C++ ile aynı paketteki şerit komutu derleyici olarak da adlandırılır.
Java araç zinciri değişkenleri
Aşağıdakiler Java araç zinciri kurallarında tanımlanır ve toolchains =
["@bazel_tools//tools/jdk:current_java_runtime"]
(veya ana makine araç zinciri eşdeğeri için "@bazel_tools//tools/jdk:current_host_java_runtime"
) değerini ayarlayan tüm kurallar tarafından kullanılabilir.
JDK'daki araçların çoğu doğrudan kullanılmamalıdır. Yerleşik Java kuralları, Java derleme ve paketleme için yayın öncesi araçların ifade edebileceğinden çok daha gelişmiş yaklaşımlar kullanır (ör. arayüz Jar'ları, başlık arayüzü Jar'ları ve son derece optimize edilmiş Jar paketleme ve birleştirme uygulamaları).
Bu değişkenler, dil uzmanları tarafından nadiren kullanılacak bir yedek mekanizmadır. Bu araçları kullanmak isterseniz lütfen önce Bazel geliştiricilerinle iletişim kurun.
-
JAVA
: "java" komutu (Java sanal makinesi). Bu durumdan kaçının ve mümkün olduğunda bunun yerinejava_binary
kuralı kullanın. Göreli bir yol olabilir.java
işlevini çağırmadan önce dizinleri değiştirmeniz gerekiyorsa çalışma dizinini değiştirmeden önce yakalamanız gerekir. JAVABASE
: Java yardımcı programlarını içeren temel dizin. Göreli bir yol olabilir. "bin" adlı bir alt dizin bulunur.
Starlark tarafından tanımlanan değişkenler
Kural ve araç zinciri yazarları, TemplateVariableInfo sağlayıcısı döndürerek tamamen özel değişkenler tanımlayabilir.
Böylece toolchains
özelliği, değerlerini okuyabilir:
Starlark tarafından tanımlanan değişkenlerle ilgili bir örneğe bakın.