Çalışma alanları, paketler ve hedefler

Sorun bildirme Kaynağı görüntüleme Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bazel, yazılımları çalışma alanı adı verilen bir dizin ağacında düzenlenen kaynak koddan oluşturur. Çalışma alanındaki kaynak dosyalar, paketlerden oluşan iç içe yerleştirilmiş bir hiyerarşide düzenlenir. Her paket, bir dizi ilgili kaynak dosya ve bir BUILD dosyası içeren bir dizindir. BUILD dosyası hangi yazılımın çıkışları kaynaktan derlenebilir.

Çalışma alanı

Çalışma alanı, dosya sisteminizde bulunan ve dosyaları oluşturun. Her çalışma alanında, WORKSPACE adlı bir metin dosyası bulunur. Bu dosya boş olabilir veya çıkışları oluşturmak için gereken harici bağımlılıklara referanslar içerebilir.

WORKSPACE adlı bir dosya içeren dizinler, bir çalışma alanının kökü olarak kabul edilir. Bu nedenle, Bazel kök dizini olan bir çalışma alanındaki dizin ağaçlarını yoksayar WORKSPACE dosyası içeren alt dizindir. Bu alt dizinler başka bir çalışma alanını oluşturur.

Bazel, WORKSPACE dosyasının takma adı olarak WORKSPACE.bazel dosyasını da destekler. Eğer her iki dosya da mevcutsa WORKSPACE.bazel kullanılır.

Kod depoları

Kodlar depolarda düzenlenir. WORKSPACE dosyasını içeren dizin, @ olarak da adlandırılan ana deponun köküdür. Diğer, (harici) depoları WORKSPACE dosyasında çalışma alanı kuralları kullanılarak tanımlanır veya Bzlmod sistemindeki modüller ve uzantılardan oluşturulan verileri içerir. Harici bağımlılıklara genel bakış makalesini inceleyebilirsiniz.

Bazel ile paketlenen çalışma alanı kuralları, Çalışma Alanı Oluşturma'daki Ansiklopedi ve yerleşikleştirilmiş hakkındaki belgeler Starlark deposu kurallarını inceleyin.

Harici depolar kod depoları olduğundan, genellikle bir WORKSPACE dosyası da oluşturulur. Ancak, bu ek WORKSPACE dosyaları Bazel tarafından yoksayıldı. Özellikle, geçişli olarak bağlı olan depolar otomatik olarak eklenmez.

Paketler

Bir depoda kod düzenlemesinin birincil birimi paket'tir. Paket, ilgili dosyaların bir koleksiyonu ve çıkış yapılarını oluşturmak için nasıl kullanılabileceklerine dair bir spesifikasyondur.

Paket, bir dizin olarak tanımlanır ve BUILD veya BUILD.bazel adlı BUILD dosyası. CEVAP paketi, dizinindeki tüm dosyaları ve altındaki tüm alt dizinleri içerir. (kendileri bir BUILD dosyası içerenler hariç). Bu tanıma göre dosyası veya dizini iki farklı paketin parçası olabilir.

Örneğin, aşağıdaki dizin ağacında my/app, ve my/app/tests alt paketi. my/app/data'ün bir paket değil, my/app paketine ait bir dizin olduğunu unutmayın.

src/my/app/BUILD
src/my/app/app.cc
src/my/app/data/input.txt
src/my/app/tests/BUILD
src/my/app/tests/test.cc

Hedefler

Paket, paketin BUILD dosyasında tanımlanan hedeflerin kapsayıcısıdır. Çoğu hedef, dosyalar ve kurallar olmak üzere iki ana türden biridir.

Dosyalar ayrıca iki türe ayrılır. Kaynak dosyalar genellikle kullanıcılar tarafından yazılır ve depoya kaydedilir. Oluşturulan dosyalar, türetilmiş dosyalar veya çıkış dosyaları olarak da adlandırılır oluşturulan verileri içerebilir.

İkinci hedef türü, bir kural ile belirtilir. Her kural örneği bir girdi kümesi ile bir çıkış dosyaları kümesi arasındaki ilişkiyi belirtir. Bir kuralın girişleri kaynak dosyalar olabileceği gibi diğer kuralların çıkışları da olabilir.

Bir kurala ait girişin kaynak dosya mı yoksa oluşturulan bir dosya mı olduğu durumlar önemsizdir; önemli olan sadece ilgili dosyanın içeriğidir. Bu durum, karmaşık bir kaynak dosyayı bir kural tarafından üretilen oluşturulmuş bir dosyayla değiştirmeyi kolaylaştırır. Örneğin, son derece yapılandırılmış bir dosyayı manuel olarak yönetmenin yükü çok yorucu hale geldiğinde ve bir kullanıcı bu dosyayı türetecek bir program yazdığında bu durum ortaya çıkar. Bu dosyayı kullananlar için herhangi bir değişiklik gerekmez. Buna karşılık, oluşturulan bir dosya, yalnızca yerel değişiklikler içeren bir kaynak dosyayla kolayca değiştirilebilir.

Bir kurala yapılan girişler, başka kuralları da içerebilir. Böyle bir şeyin tam anlamı çoğu zaman oldukça karmaşıktır ve dile ya da kurala bağlıdır, basittir: bir C++ kitaplık kuralı A'da başka bir C++ kitaplığı olabilir için B kuralına ekleyin. Bu bağımlılık, derleme sırasında A'nın B'nin başlık dosyalarına, bağlantı oluşturma sırasında B'nin sembollerine ve yürütme sırasında B'nin çalışma zamanı verilerine erişebilmesini sağlar.

Tüm kuralların değişmeyen bir yönü, bir kural tarafından oluşturulan dosyaların her zaman ait olduğu kuralın kendisiyle aynı pakete sahiptir; aynı zamanda başka bir paket. Bir kurala ait girişlerin başka bir kaynaktan gelmesi sık karşılaşılan bir durum değildir paketten yararlanın.

Paket grupları, kuralları vardır. Paket grupları package_group işlevi tarafından tanımlanır. Bu grupların üç özelliği vardır: İçerdikleri paketlerin listesi, adları ve içerdikleri diğer paket grupları. Bunlara referans vermek için izin verilen tek yol visibility özelliğinden veya default_visibility özelliğinden package işlevi; Dosya oluşturmaz veya kullanmazlar. Daha fazla package_group dokümanlarına göz atın.

Labels