C++ ve Bazel

Sorun bildirin Kaynağı göster

Bu sayfada, Bazel'ı C++ projeleriyle kullanmanıza yardımcı olacak kaynaklar bulunmaktadır. Bir eğiticiye, 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ı olur:

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 yönergeleri izleyin:

  • Her BUILD dosyası, dizindeki her derleme birimi için 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 başlık dosyalarını ve kitaplığın doğrudan bağımlılıkları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 şöyle görünür:

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

Yolları dahil edin

Yolları dahil etmek için şu yönergeleri izleyin:

  • Tüm öğelerin çalışma alanı dizinine göre yol içermesini sağlayın.

  • Sistem dışı başlıklar için açılı parantezleri (#include <foo/bar/baz.h>) değil, tırnak içine alınmış içermeleri (#include "foo/bar/baz.h") kullanın.

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

  • Harici kod deposunun ön ek gerektirmesi gibi, proje deposunun dışına işaret etmeyi gerektiren eski veya third_party kodları için cc_library kural hedefinde include_prefix ve strip_include_prefix bağımsız değişkenlerini kullanın.

Araç zinciri özellikleri

Aşağıdaki isteğe bağlı özellikler C++ projelerinin hijyenini artırabilir. 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ş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ı tarafından sağlanan başlıkları içermesini zorunlu kılar. Varsayılan araç zinciri, bu özelliği Linux'ta derleyici olarak clang ile destekler.