C++ ve Bazel

Sorun bildir Kaynağı görüntüleyin Nightly · 7.4 .

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

Bazel ile ilgili genel en iyi uygulamalara ek olarak, aşağıda C++ projelerine özel en iyi uygulamalar yer almaktadır.

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 ya da cc_* kurallarının features özelliği kullanılarak etkinleştirilebilir:

  • parse_headers özelliği, --process_headers_in_dependencies işareti kullanılırken C++ derleyicinin yerleşik hedeflerdeki tüm başlık dosyalarını ve bağımlılıklarını ayrıştırmak (ancak derlemek değil) için kullanılmasını sağlar. Bu, yalnızca başlık içeren kitaplıklardaki sorunları yakalamanıza ve başlıkların bağımsız ve eklendikleri sıradan bağımsız olduğundan emin olmaya yardımcı olabilir.
  • layering_check özelliği, hedeflerin yalnızca doğrudan bağımlılıklarının sağladığı üstbilgileri içermesini zorunlu kılar. Varsayılan araç zinciri, Linux'ta derleyici olarak clang kullanıldığında bu özelliği destekler.