C++ Kurallarıyla Entegrasyon

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

Bu sayfada, çeşitli düzeylerde C++ kurallarıyla nasıl entegrasyon sağlanacağı açıklanmaktadır.

C++ araç zincirine erişme

Bunun nedeni: C++ kurallarının sürekli olarak taşınması platformlara araç zincirleri yerine şu adreste bulunan yardımcı işlevi kullanmalıdır: @bazel_tools//tools/cpp:toolchain_utils.bzl, hem araç zincirleri devre dışı hem de etkin olduğunda çalışır. Bir C++ uygulamasına bağımlı olmak kuralınıza araç zincirini eklemek için Label özelliğini _cc_toolchain adlı bir özellik ile değiştirin ve Hedef: @bazel_tools//tools/cpp:current_cc_toolchain ( cc_toolchain_alias kuralı ile değiştirin. Bu kural, seçili C++ araç zincirini işaret eder). Ardından, kural uygulamasında find_cpp_toolchain(ctx) almak için CcToolchainInfo. Eksiksiz bir çalışan örneği şurada bulunabilir: kurallar_cc örneklerinde bulabilirsiniz.

C++ araç zincirini kullanarak komut satırları ve ortam değişkenleri oluşturma

Genelde C++ araç zinciriyle entegrasyon için, komut satırı bayraklarını C++ kurallarının yaptığı gibi, ancak doğrudan C++ işlemlerini kullanmadan yapabilirsiniz. Çünkü kendi eylemlerimizi yazarken o davranışlardan C++ araç zinciriyle tutarlı bir şekilde kullanabilirsiniz (örneğin, C++ komut satırını flag'lerini arka planda C++ derleyiciyi çağıran bir araca ekler.

C++ kuralları, özelliklere dayalı olarak komut satırları oluşturmak için özel bir yöntem kullanır yapılandırma hakkında daha fazla bilgi edinin. Komut satırı oluşturmak için Şunlara ihtiyacınız var:

Bazı araçlar da mevcuttur. Örneğin, compiler_executable değerine ayarlanması gerekir. Araca özel alıcılar tarafından seçileceğinden, bunlar yerine get_tool_for_action tercih edilir kaldırılır.

Eksiksiz bir çalışan örneği şurada bulunabilir: kurallar_cc örneklerinde bulabilirsiniz.

C++ kurallarına bağlı olan ve/veya C++ kurallarının bağlı olabileceği Starlark kurallarını uygulama

Çoğu C++ kuralı CcInfo CompilationContext içeren bir sağlayıcı ve LinkingContext. Bu araçlar sayesinde, tüm geçişli başlıklar gibi bilgilere erişilebilir. veya kitaplıklar. CcInfo tarafından ve CcToolchainInfo özelinden Starlark kuralları, ihtiyaç duydukları tüm bilgilere ulaşabilmelidir.

Özel bir Starlark kuralı CcInfo değerini sağlarsa bu, C++ kurallarına onlar da buna bağımlı olabilir. Ancak, yalnızca içeriği dağıtmanız gerekiyorsa dikkatli olun CcInfo, grafikten ikili kurala, ardından da bu kuraldan yararlanan satıra kadar CcInfo farklı bir sağlayıcıda. Örneğin, java_library kuralı istenirse java_binary değerine kadar yerel bağımlılıkları yaymak için Doğrudan CcInfo (java_library için cc_binary anlamlı değil), anahtar/değer çiftinin içine alınır (örneğin, JavaCcInfo).

Eksiksiz bir çalışan örneği şurada bulunabilir: kurallar_cc örneklerinde bulabilirsiniz.

C++ kurallarının mantığını ve işlemlerini yeniden kullanma

Henüz kararlı değil, API kararlı hale geldiğinde bu bölüm güncellenecektir. Takip et Güncel bilgiler için #4570 görüntüleyebilirsiniz.