C++ ve Bazel

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

Bu sayfada, Bazel'i C++ projeleriyle kullanmanıza yardımcı olacak kaynaklar yer almaktadır. Bu sayfa, bir eğitime, derleme kurallarına ve Bazel ile C++ projeleri oluşturmaya özel diğer bilgilere bağlantı verir.

Bazel ile çalışma

Aşağıdaki kaynaklar, C++ projelerinde Bazel ile çalışmanıza yardımcı olacaktır:

En iyi uygulamalar

Genel Bazel en iyi uygulamalarına ek olarak, C++ projelerine özgü en iyi uygulamalar aşağıda verilmiştir.

BUILD dosyaları

BUILD dosyalarınızı oluştururken aşağıdaki kurallara uyun:

  • Her BUILD dosyası, dizindeki derleme birimi başına bir cc_library kural hedefi içermelidir.

  • Artımlılığı en üst düzeye çıkarmak ve derlemeyi paralel yapmak için C++ kitaplıklarınızı mümkün olduğunca ayrıntılı hale getirmelisiniz.

  • srcs ürününde tek bir kaynak dosya varsa kitaplığı, söz konusu C++ dosyasının adıyla aynı şekilde adlandırın. Bu kitaplık, C++ dosyalarını, eşleşen tüm üstbilgi dosyalarını ve kitaplığın doğrudan bağımlılarını içermelidir. Örneğin:

    cc_library(
        name = "mylib",
        srcs = ["mylib.cc"],
        hdrs = ["mylib.h"],
        deps = [":lower-level-lib"]
    )
    
  • Dosyadaki her cc_library hedefi için bir cc_test kural hedefi kullanın. Hedef [library-name]_test ve kaynak dosyayı [library-name]_test.cc olarak adlandırın. Örneğin, yukarıda gösterilen mylib kitaplık hedefi için bir test hedefi şu şekilde görünür:

    cc_test(
        name = "mylib_test",
        srcs = ["mylib_test.cc"],
        deps = [":mylib"]
    )
    

Yolları dahil edin

Dahil etme yolları için aşağıdaki yönergeleri uygulayın:

  • Tüm dahil etme yollarını Workspace dizine göre yapın.

  • Sistem dışı üstbilgiler için tırnak içine alınmış dahil etmeler (#include "foo/bar/baz.h") kullanın, köşeli parantez (#include <foo/bar/baz.h>) kullanmayın.

  • . (mevcut dizin) veya .. (üst dizin) gibi UNIX dizin kısayollarını kullanmaktan kaçının.

  • Proje deposunun dışına işaret etmeyi gerektiren eski veya third_party kodlar için (ör. harici depo, ön ek gerektirir) cc_library kural hedefinde include_prefix ve strip_include_prefix bağımsız değişkenlerini kullanın.

Araçlar zinciri özellikleri

Aşağıdaki isteğe bağlı özellikler, C++ projesinin temizliğini iyileştirebilir. Bunlar, --features komut satırı işareti veya repo, package veya cc_* kurallarının features özelliği kullanılarak etkinleştirilebilir:

  • parse_headers özelliği, --process_headers_in_dependencies işaretçisi kullanıldığında derlenmiş hedeflerdeki tüm başlık dosyalarını ve bunların bağımlılıkları ayrıştırmak (ancak derlemek değil) için C++ derleyicisinin kullanılmasını sağlar. Bu, yalnızca başlık içeren kitaplıklardaki sorunları yakalamanıza yardımcı olabilir ve başlıkların kendi kendine yeterli olmasını ve dahil edildikleri sıradan bağımsız olmasını sağlayabilir.
  • layering_check özelliği, hedeflerin yalnızca doğrudan bağımlılıkları tarafından sağlanan başlıkları içermesini zorunlu kılar. Varsayılan araç zinciri, Linux'ta derleyici olarak clang kullanıldığında bu özelliği destekler.