C++ ve Bazel

Sorun bildir Kaynağı göster

Bu sayfa, Bazel'ı C++ projeleriyle kullanmanıza yardımcı olacak kaynaklar içerir. Bu bağlantıda bir eğiticiye, derleme kurallarına ve Bazel ile C++ projeleri oluşturmaya yönelik diğer bilgilere ulaşabilirsiniz.

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, aşağıda C++ projelerine özel en iyi uygulamaları bulabilirsiniz.

BUILD dosyaları

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

  • 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 hale getirmek için C++ kitaplıklarınızı mümkün olduğunca ayrıntılı hale getirmeniz gerekir.

  • srcs bölgesinde tek bir kaynak dosya varsa kitaplığa, C++ dosyasının adıyla aynı adı verin. Bu kitaplık C++ dosyaları, eşleşen başlık dosyaları 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. Hedefi [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

Dahil etme yolları için şu yönergeleri izleyin:

  • Çalışma alanı dizinine göre tüm yolların dahil edilmesini sağlayın.

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

  • . (geçerli 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 kodu için (ör. harici depo, ön ek kullanılmasını içerir) 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, bir C++ projesinin hijyenini 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şaretini kullanırken C++ derleyicisinin dahili hedeflerdeki tüm başlık dosyalarını ve bağımlılıklarını ayrıştırmak (ancak derlemek) 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 olmasını sağlamaya 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 sağlar. Varsayılan araç zinciri, bu özelliği Linux'ta derleyici olarak clang ile destekler.