Etiketler

. Sorun bildirin Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Tüm hedefler tam olarak bir pakete aittir. Hedef adı etiketini adlandırdı. Her etiket bir hedefi benzersiz şekilde tanımlar. CEVAP standart biçimdeki tipik etiket aşağıdaki gibi görünür:

@myrepo//my/app/main:app_binary

Etiketin ilk bölümü, @myrepo// kod deposudur. Tipik bir durumda, bir etiket aynı depoya başvuruda bulunurken depo tanımlayıcısı // olarak kısaltılabilir. Dolayısıyla, @myrepo içinde bu etiket genellikle

//my/app/main:app_binary

Etiketin ikinci bölümü, uygun olmayan paket adıdır my/app/main, paketin yolu %100'e ulaştı. Depo adı ve bu kod deposunun nitelikli olmayan paket adı, tam nitelikli paket adından oluşur @myrepo//my/app/main Etiket, aynı terim paketinin adı (ve isteğe bağlı olarak iki nokta üst üste) atlanabilir. @myrepo//my/app/main içinde, bu etiket aşağıdaki yollardan biri için yazılabilir:

app_binary
:app_binary

Genel olarak, iki nokta üst üste işareti dosyalarda çıkarılır. ancak kurallar için saklanır ancak başka şekilde önemli değildir.

Etiketin iki nokta üst üste işaretinden sonraki bölümü (app_binary), uygun olmayan hedeftir dokunun. Paket yolunun son bileşeniyle eşleştiğinde ve iki nokta üst üste işareti koyulabilir. Dolayısıyla, şu iki etiket eşdeğerdir:

//my/app/lib
//my/app/lib:lib

Paketin alt dizinindeki bir dosya hedefinin adı, dosyanın yoludur kök dizin (BUILD dosyasını içeren dizin) ile ilişkilidir. Dolayısıyla, bu dosya, deponun my/app/main/testdata alt dizininde bulunuyor:

//my/app/main:testdata/input.txt

//my/app ve @some_repo//my/app gibi dizelerin bağlı olarak iki anlamı vardır bağlam hakkında daha fazla bilgi edineceksiniz. Bazel bir etiket beklediğinde Sırasıyla //my/app:app ve @some_repo//my/app:app. Ancak, Bazel bir paket beklediğinde (ör. package_group spesifikasyonlarında) paketinin yanındaki kutuyu işaretleyin.

BUILD dosyalarında sık yapılan bir hata, bir pakete atıfta bulunmak için //my/app kullanılmasıdır veya tüm hedeflere ekleme yapar. Unutmayın, //my/app:app ile eşdeğerdir; dolayısıyla, app hedefini my/app paketinin tüm özellikleri dahil edilir.

Bununla birlikte, //my/app bir package_group veya .bzl dosyası için paket adının mutlak olduğunu ve üst düzey dizinde kökten kaynaklandığını bildirir çalışma alanı dizini oluşturur.

Göreli etiketler, diğer paketlerdeki hedeflere başvuruda bulunmak için kullanılamaz; "the" depo tanımlayıcısı ve paket adı bu durumda her zaman belirtilmelidir. Örneğin, kaynak ağaç hem my/app paketini hem de my/app/testdata paketi (bu iki dizinden her birinin kendi paketi BUILD dosyası) kullanıyorsanız ikinci paket testdepot.zip adlı bir dosya içerir. Burası iki farklı şekilde (biri yanlış, biri doğru) //my/app:BUILD:

Yanlış: testdata farklı bir paket olduğundan göreli yol kullanamazsınız

testdata/testdepot.zip

Doğru: Tam yoluyla testdata için bakın

//my/app/testdata:testdepot.zip

@// ile başlayan etiketler, ana çalışmaya devam eder. Bu nedenle @//a/b/c, //a/b/c. İlk depo ana depo, ikinci depo ise harici depoda //a/b/c araması yapar. Bu, özellikle de temel ana depodaki hedeflere işaret eden ve bu verileri kullanır.

Hedeflere atıfta bulunmanın farklı yolları hakkında bilgi için hedef kalıpları.

Etiketin sözcüksel spesifikasyonu

Etiket söz dizimi, açıkça kabuktur. Bu sayede yanlışlıkla alıntı sorunlarını önleyebilir ve ekip üyelerinizden etiketler oluşturmak gibi etiketler oluşturan araçlar ve komut dosyaları oluşturabilirsiniz; örneğin Bazel Sorgu Dili.

İzin verilen hedef adlarının tam ayrıntıları aşağıda verilmiştir.

Hedef adlar — package-name:target-name

target-name, paketteki hedefin adıdır. Kuralın adı BUILD kuralının bildirimindeki name özelliğinin değeridir file; bir dosyanın adı, BUILD dosyası.

Hedef adlar, tamamen az kümesindeki karakterlerden oluşmalıdır AZ, 0-9 ve noktalama işaretleri !%-@^_"#$&'()*-+,;<=>?[]{|}~/..

Dosya adları normal biçimde göreli yol adları olmalıdır; diğer bir deyişle, başında veya sonunda eğik çizgiyle geçmez (örneğin, /foo ve foo/ yasaktır) ve yol ayırıcı olarak art arda birden fazla eğik çizgi içermemelidir (örneğin, foo//bar). Benzer şekilde, üst düzey referanslar (..) ve mevcut dizin başvuruları (./) yasaktır.

Yanlış: Diğer paketlerdeki dosyalara referans vermek için ".." kullanmayın

Doğru: Kullanın `//package-name:filename`

Dosya hedefi adında / yaygın olarak kullanılsa da Kural adlarında /. Özellikle bir etiketin kısaltılmış biçimi okuyucunun kafasını karıştırabilir. //foo/bar/wiz etiketi her zaman bir kısaltmadır //foo/bar/wiz:wiz için, foo/bar/wiz gibi bir paket olmasa bile; o hiçbir zaman //foo:bar/wiz değerine başvuruda bulunmaz (söz konusu hedef mevcut olsa bile).

Bununla birlikte, eğik çizgi kullanmanın kullanışlı olduğu bazı durumlar veya hatta bazen gerekli olabilir. Örneğin, belirli kuralların adı ana kaynak dosyaları oluşturun. Bu dosyalar, paketin bir alt dizininde bulunabilir.

Paket adları — //package-name:target-name

Paketin adı, BUILD dosyasını içeren dizinin adıdır. depolandığı deponun en üst düzey dizinine kıyasla. Örnek: my/app.

Paket adları, tamamen kümeden alınan karakterlerden oluşmalıdır A-Z, a-z, 0-9, "/", "-", ".", "@" ve "_" olup olmadığının belirlenmesi için eğik çizgiyle başlar.

Modülü açısından önemli bir dizin yapısına sahip olan bir dil için sistemi için (örneğin, Java) aynı dizinde değil, aynı zamanda geçerli tanımlayıcılara sahip olmanız gerekir.

Bazel, çalışma alanının kök paketindeki hedefleri desteklese de (örneğin, //:foo) olduğu durumlarda, tüm anlamlı paketlerin hepsi için bu paketi boş bırakmanız en iyi açıklayıcı adlara sahiptir.

Paket adları // alt dizesini içeremez veya eğik çizgiyle bitemez.

Kurallar

Bir kural, girişler ve çıkışlar arasındaki ilişkiyi belirtir ve bu adımları gözden geçirin. Kurallar birçok farklı olabilir kural sınıfı olarak da adlandırılır. yürütülebilir dosyalar ve kitaplıklar, yürütülebilir dosyaları test çıkışları Ansiklopedi Oluşturma konusunda açıklandığı gibidir.

BUILD dosyaları, kuralları çağırarak hedefleri bildirir.

Aşağıdaki örnekte my_app hedefinin beyanını görüyoruz. (cc_binary kuralı) kullanılıyor.

cc_binary(
    name = "my_app",
    srcs = ["my_app.cc"],
    deps = [
        "//absl/base",
        "//absl/strings",
    ],
)

Her kural çağrısının bir name özelliği vardır (bu özellik geçerli bir target name) içerir. BUILD dosyasından oluşur.

Her kuralın bir dizi özellikleri vardır; ve her bir ürün için geçerli özellikleri her özelliğin önem ve anlamı bir fonksiyonudur. nasıl bir kural olur? daha fazla bilgi edinmek için Ansiklopedi Oluşturma ve bunlarla ilişkili özellikleri içerir. Her özelliğin bir adı ve tür. Özniteliğin sahip olabileceği yaygın türlerden bazıları tam sayı, etiket, liste etiket listesi, dize, dize listesi, çıkış etiketi, çıkış etiketleri listesi. Değil her kuralda tüm özelliklerin belirtilmesi gerekir. Böylece özellikler anahtarlardan (adlardan) isteğe bağlı, yazılan değerlere kadar pek çok işlevi kullanıma sunduk.

Birçok kuralda bulunan srcs özelliği "etiket listesi" türüne sahiptir; onun değeri varsa, her biri özel bir hedefin adı olan etiketlerden oluşan bir listedir. giriş yapalım.

Bazı durumlarda, kural türünün adı biraz isteğe bağlıdır. kural tarafından oluşturulan dosyaların adları ilgi çekicidir ve genrules. Daha fazla bilgi için bkz. Genel Kurallar: genrule.

Diğer durumlarda ad önemlidir: *_binary ve *_test kuralları için örneğin, kural adı seçeceğim.

Hedeflerin üzerindeki bu yönlendirilmiş grafik, hedef grafik veya bağımlılık grafiği oluştur ve bağımlılığın Bazel Sorgu aracı çalışır.

Hedefler Dosya derleyin