- Kullanım
- Önceden tanımlanmış değişkenler
- Önceden tanımlanmış genel değişkenler
- Önceden tanımlanmış kaynak/çıkış yolu değişkenleri
- Özelleştirilebilen değişkenler
"Yap" değişkenler, genişletilebilir dize değişkenlerinin özel bir sınıfıdır "'Değişken yap'a tabi" olarak işaretlenmiş özelliklere değiştirme".
Bunlar örneğin, belirli araç zinciri yollarının kullanıcı tarafından oluşturulan derleme işlemleridir.
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
"'Değişken yap'a tabi" olarak işaretlenen özellikler "
"Marka" öğesine FOO
değişkeni şu şekildedir:
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.
"Yap" Örneğin,
@
, yalnızca dolar işareti kullanılarak da referans alınabilir, yalnızca dolar işareti kullanılmadan
parantez içine alın. Ö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ış "Marka" değişkenlerine, "'Değişken oluştur' konusuyla ilgili değiştirme" hatasını düzeltmesi gerekir.
Bu değişkenlerin listesini ve belirli bir derleme kümesi için değerlerini görmek isterseniz seçenekler, koşma
bazel info --show_make_env [build options]
ve büyük harfle yazılmış en üstteki çıkış satırlarına bakın.
Önceden tanımlanmış değişkenlerle ilgili bir örneği inceleyin.
Araç zinciri seçenek değişkenleri
COMPILATION_MODE
:fastbuild
,dbg
veyaopt
. (Daha fazla ayrıntılar)
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 aracı
genrule
içinden çalıştırmak isterseniz yolunu almak için önerilen yol$(execpath toolname)
Burada araç adı,genrule
öğesinintools
özelliği. 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ış genel değişkenler
Aşağıdakiler genrule
adlı çocuğa özel olarak kullanılabilir
cmd
özelliğine ait ve
bu özelliğin çalışmasında genel olarak ö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
adlı kanalınsrcs
listesi (veya daha fazlası tam olarak: Google Etiket Yöneticisi'ndeki etiketlere karşılık gelen dosyalarınsrcs
listesi). Yalnızca bir kaynak dosyanız varsa$<
öğesini de kullanabilirsiniz. -
<
: Tek bir dosyaysaSRCS
. Diğer tetikleyiciler hata içeriyor. -
@
: 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. Eğer outs tek bir giriş içerir. bu dosyayı içeren dizine genişler. Birden fazla Bu işlem, paketingenfiles
ağacı, tüm çıkış dosyaları aynı olsa bile alt dizininiz olur.Not:
@D
yerineRULEDIR
kullanın, çünküRULEDIR
daha basit anlamlara sahiptir ve aynı şekilde davranır. veya çıkış dosyası sayısından bağımsız olarak değiştirilebilir.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 yazmaktan kaçını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 çıktısı olan dosyalar için bu, dosyanın çıkış yoludur. (aşağıdaki çıkış dosyalarının 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
. Yönetici yolu (yani kökün altındaki alt yoldur)testapp/empty.source
şeklindedir. 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. Örneğin, (kaynak dosyaları temsil eden etiketler) bu 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
: Derlenen bir ikili programın çalışma zamanında çalıştırma dosyalarının alt dizinine göre bir bağımlılık bul dizini oluşturur. Not: Bu yalnızca--enable_runfiles
etkinleştirildi, bu durum şurada geçerli değil: Varsayılan olarak Windows. Ş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,empty.source
veapp
tamamen çalışma alanına bağlı yollar:testapp/empty.source
vetestapp/app
.Harici bir depodaki dosyanın
rootpath
öğesirepo
,../repo/
ile başlayacak ve ardından depoya bağlı yolunu izler.Bu öğede aynı "yalnızca bir çıkış" bulunur
execpath
olarak kabul edersiniz. -
rlocationpath
: Derlenen bir ikili programın, aşağıdaki konumda bağımlılık bulmak için Runfiles kitaplığınınRlocation
işlevine geçirebileceği yol veya Runfiles manifest'ini içerir.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 programa iletme ve yolu Runfiles kitaplıklarını kullanarak bağımlılıkları bulmak için tercih edilen yaklaşımdır. belirler.
rootpath
ile kıyaslandığında daha avantajlı tüm platformlarda çalışır ve Runfiles dizini kullanılabilir.Bu öğede aynı "yalnızca bir çıkış" bulunur
execpath
olarak kabul edersiniz. -
location
:execpath
veyarootpath
(genişletilen özelliğe bağlı olarak). Bu önceden Starlark'tan gelen eski davranıştır. Bu davranışla ilgili aynı şey söz konusu. Bkz. #2475 inceleyebilirsiniz.
execpaths
, rootpaths
, rlocationpaths
,
locations
, execpath
kelimesinin çoğul varyasyonlarıdır
rootpath
, rlocationpaths
velocation
,
tıklayın. Etiketlerin birden fazla çıktı üretmesini destekler.
her çıkış boşlukla ayrılmış olarak listelenir. Sıfır çıkış kuralları ve bozuk
etiketler yapı hataları oluşturur.
Başvurulan tüm etiketler, tüketen hedefin srcs
içinde görünmelidir.
veya deps
. 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
sorun yok.
Ö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 gerçekten iyi bir dönüşüm oranı olmadığı sürece tüm değişkenler temel Bazel'in içine katmayı düşündük. 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ımlanmıştır ve tüm kurallar tarafından kullanılabilir
toolchains =
["@bazel_tools//tools/cpp:current_cc_toolchain"]
değerini ayarlayan
java_binary
gibi bazı kurallar, dolaylı olarak
C++ araç zincirini kural tanımlarına dahil etmelidir. Bu değişkenleri devralırlar
otomatik olarak oluşturur.
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. Bu araçları kullanmak isterseniz lütfen önce Bazel geliştiricilerinle iletişim kurun.
ABI
: C++ ABI sürümü.-
AR
: "ar" komutudur. -
C_COMPILER
: C/C++ derleyici tanımlayıcısı, ör.llvm
. -
CC
: C ve C++ derleyici komutu.Şuralarda her zaman
CC_FLAGS
kullanmanızı önemle tavsiye ederiz:CC
ile kombinasyonu. Aksi takdirde tüm risk size aittir. CC_FLAGS
: C/C++ için minimal bir işaret grubu derleyici tarafından kullanılabilmesini sağlar. Bu, özellikle deCC
birden fazla özelliği destekliyorsa doğru mimariyi seçin inceleyebilirsiniz.-
NM
: "nm" komutudur. -
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ımlanmıştır ve tüm kurallar tarafından kullanılabilir
toolchains =
["@bazel_tools//tools/jdk:current_java_runtime"]
(veya
"@bazel_tools//tools/jdk:current_host_java_runtime"
(ana makine araç zinciri eşdeğeri için).
JDK'daki araçların çoğu doğrudan kullanılmamalıdır. Yerleşik Java kuralları, Java derleme ve paketleme işlemleri için çok daha karmaşık yaklaşımlar kullanır. veya yukarı akış araçlarının ifade edebileceğinden çok daha fazlasını içerir. Kavanozlar ve son derece optimize edilmiş Jar paketleme ve birleştirme uygulamaları.
Bu değişkenler, bir dili kullanan dil uzmanları tarafından nadiren kullanılır. Bu araçları kullanmak isterseniz lütfen önce Bazel geliştiricilerinle iletişim kurun.
-
JAVA
: "Java" komutu (Java sanal için kullanılabilir). Bundan kaçının vejava_binary
kuralı kullanın . Göreli bir yol olabilir. Değişiklik yapmanız gerekiyorsajava
çağırmadan önce dizinleri yakalamanız gerekir, çalışma dizinini inceleyin. JAVABASE
: Şunu içeren temel dizin: Java yardımcı programları. Göreli bir yol olabilir. Bir "bin" olacaktır alt dizine eklenir.
Starlark tarafından tanımlanan değişkenler
Kural ve araç zinciri yazarları,
döndürerek tamamen özelleştirilebilen değişkenleri
TemplateVariableInfo
sağlar.
Böylece toolchains
özelliği, değerlerini okuyabilir:
Starlark tarafından tanımlanan değişkenlerle ilgili bir örneğe bakın.