C++ ve Bazel

. Sorun bildirin Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Bu sayfada, Bazel'ı C++ projeleriyle kullanmanıza yardımcı olacak kaynaklar bulunmaktadır. Bağlantı oluşturur ve C++ derlemeye özel diğer bilgiler için bir eğiticiye, derleme başka projeleri de var.

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 uygulamaların yanı sıra aşağıda en iyi uygulamaları paylaşacağım.

BUILD dosyaları

BUILD dosyalarınızı oluştururken aşağıdaki yönergeleri izleyin:

  • Her BUILD dosyası bir cc_library içermelidir kural hedefi belirtir.

  • C++ kitaplıklarınızı mümkün olduğunca ayrıntılı hale ve yapıyı paralel hale getirmek için bu stratejileri kullanabilirsiniz.

  • srcs içinde tek bir kaynak dosya varsa kitaplığı şu şekilde adlandırın: bu C++ dosyasının adını yazın. Bu kitaplık C++ dosyaları, başlık dosyalarını ve kitaplığın doğrudan bağımlılıklarını içerir. Ö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. [library-name]_test ve [library-name]_test.cc kaynak dosyasını hedefleyin. Örneğin, yukarıda gösterilen mylib kitaplık hedefi için bir test hedefi aşağıdaki gibi 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ışı üstbilgiler için değil, tırnak içine alınmış bağlantı (#include "foo/bar/baz.h") değerini kullan açılı ayraçlar (#include <foo/bar/baz.h>).

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

  • third_party harici veri deposu gibi ön ek gerektirecek şekilde eklenerek, include_prefix ve strip_include_prefix cc_library kural hedefinde bağımsız değişkenler olarak kullanılır.

Araç zinciri özellikleri

Aşağıdaki isteğe bağlı özellikler C++ projelerinin hijyenini iyileştirebileceğini düşünüyorum. Bunlar, --features komut satırı işareti veya features repo, package veya cc_* kuralları:

  • parse_headers özelliği, bunu ayrıştırmak için C++ derleyicisinin kullanılmasını sağlar derlenmiş hedeflerdeki tüm başlık dosyaları ve bağımlılıkları (ancak derlemez) kullanırken --process_headers_in_dependencies tıklayın. Bu, yalnızca başlık içeren kitaplıklardaki sorunları bulmanıza yardımcı olabilir ve Başlıklar bağımsızdır ve hangi sırayla yazıldıklarından bağımsızdır. dahil.
  • layering_check özelliği, hedeflerin yalnızca başlıkları içermesini zorunlu kılar doğrudan bağımlılıkları tarafından sağlanır. Varsayılan araç zinciri bunu destekler özelliğini kullanarak clang derleyiciyi kullanabilirsiniz.