Kod depoları, çalışma alanları, paketler ve hedefler

Sorun bildir Kaynağı göster

Bazel, depo adı verilen dizin ağaçlarında düzenlenen kaynak kodundan yazılım derler. Çalışma alanı, tanımlanmış bir depo grubu kümesidir. Depolardaki kaynak dosyalar, iç içe yerleştirilmiş bir paket hiyerarşisinde düzenlenir. Burada her paket, ilgili kaynak dosyalarını ve bir BUILD dosyasını içeren bir dizindir. BUILD dosyası, hangi yazılım çıkışlarının kaynaktan oluşturulabileceğini belirtir.

Depolar

Bazel derlemesinde kullanılan kaynak dosyalar depolar halinde düzenlenir (genellikle depolar şeklinde kısaltılır). Depo, kök dizininde bir sınır işareti dosyası bulunan bir dizin ağacıdır. Böyle bir sınır işareti dosyası MODULE.bazel, REPO.bazel veya eski bağlamlarda WORKSPACE ya da WORKSPACE.bazel olabilir.

Geçerli Bazel komutunun çalıştırıldığı depoya ana depo adı verilir. Diğer (harici) depolar, depo kuralları tarafından tanımlanır. Daha fazla bilgi için harici bağımlılıklara genel bakış sayfasını inceleyin.

Workspace

Çalışma alanı, aynı ana depodan çalıştırılan tüm Bazel komutları tarafından paylaşılan ortamdır. Ana depoyu ve tanımlanan tüm harici depolar kümesini kapsar.

Geçmişte "depo" ve "çalışma alanı" kavramlarının bir arada kullanıldığını unutmayın. "Çalışma alanı" terimi çoğu zaman ana veri deposunu ifade etmek için, hatta bazen "depo" kelimesiyle eş anlamlı olarak bile kullanılmıştır.

Paketler

Depodaki kod düzenlemenin birincil birimi pakettir. Paket, ilgili dosyaların bir koleksiyonu ve çıktı yapıları üretmek için bunların nasıl kullanılabileceğine dair bir belirtimdir.

Paket, BUILD veya BUILD.bazel adlı bir BUILD dosyasının yer aldığı dizin olarak tanımlanır. Bir paket, kendi dizinindeki tüm dosyaları ve BUILD dosyası içerenler hariç olmak üzere altındaki tüm alt dizinleri içerir. Bu tanımda hiçbir dosya veya dizin iki farklı paketin parçası olamaz.

Örneğin, aşağıdaki dizin ağacında my/app ve my/app/tests alt paketi olmak üzere iki paket bulunur. my/app/data öğesinin paket olmadığını, 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 iki ana türden biridir: dosyalar ve kurallar.

Dosyalar ayrıca iki türe ayrılır. Kaynak dosyalar, genellikle kullanıcıların çabasıyla yazılır ve depoya gönderilir. Oluşturulan dosyalar (bazen türetilmiş dosyalar veya çıkış dosyaları da denir) kontrol edilmez ancak kaynak dosyalardan oluşturulur.

İkinci hedef türü bir kural ile tanımlanır. Her kural örneği, bir giriş grubu ile çıkış dosyası grubu arasındaki ilişkiyi belirtir. Kural girişleri kaynak dosyalar olabileceği gibi başka kuralların da çıktıları olabilir.

Kural girişinin kaynak dosya mı yoksa oluşturulan dosya mı olduğu çoğu durumda önemsizdir. Önemli olan yalnızca söz konusu dosyanın içeriğidir. Bu gerçek, karmaşık bir kaynak dosyayı bir kural tarafından oluşturulmuş bir dosyayla değiştirmeyi kolaylaştırır. Yüksek düzeyde yapılandırılmış bir dosyayı manuel olarak yönetme yükü fazla yorucu hale geldiğinde ve birisi bu dosyayı elde etmek için bir program yazdığında meydana gelir. Söz konusu dosyanın kullanıcıları için herhangi bir değişiklik gerekmez. Öte yandan, oluşturulan bir dosya, yalnızca yerel değişikliklerin yapıldığı bir kaynak dosyayla kolayca değiştirilebilir.

Bir kurala yönelik girişler başka kurallar da içerebilir. Bu tür ilişkilerin kesin anlamı genellikle oldukça karmaşıktır ve dile ya da kurallara bağlıdır, ancak sezgisel olarak basittir: C++ kitaplık kuralı A, bir giriş için başka bir C++ kitaplık kuralı B'ye sahip olabilir. Bu bağımlılığın etkisi, B'nin başlık dosyalarının derleme sırasında A tarafından, bağlantı sırasında B'nin sembolleri A tarafından, B'nin çalışma zamanı verilerinin ise yürütme sırasında A tarafından kullanılabilir olmasıdır.

Bir kural tarafından oluşturulan dosyaların her zaman kuralın kendisiyle aynı pakete ait olması, tüm kuralların değişmediği bir durumdur. Dosyaları başka bir pakette oluşturmak mümkün değildir. Kural girişlerinin başka bir paketten gelmesi normaldir.

Paket grupları, belirli kuralların erişilebilirliğini sınırlandırmayı amaçlayan paket gruplarıdır. Paket grupları package_group işleviyle tanımlanır. Bunların üç özelliği vardır: içerdikleri paketlerin listesi, adları ve dahil ettikleri diğer paket grupları. Bunlara referansta bulunmak için yalnızca kuralların visibility özelliğinden veya package işlevinin default_visibility özelliğinden yararlanabilirsiniz; bu yöntemler dosya oluşturmaz veya kullanmaz. Daha fazla bilgi için package_group belgelerine göz atın.

Etiketler