C++ Kurallarıyla Entegrasyon

Sorun bildirin Kaynağı göster

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

C++ araç zincirine erişme

C++ kurallarının sürekli olarak platformlara ve araç zincirlerine taşınması nedeniyle, hem araç zincirleri devre dışı bırakıldığında hem de etkinken @bazel_tools//tools/cpp:toolchain_utils.bzl'de bulunan yardımcı işlevi kullanmanız gerekir. Kuralınızda bir C++ araç zincirine bağımlı olmak için _cc_toolchain adlı bir Label özelliği ekleyin ve bu kuralı @bazel_tools//tools/cpp:current_cc_toolchain öğesine (şu anda seçili olan C++ araç zincirine yönlendiren bir cc_toolchain_alias kuralı örneği) yönlendirin. Ardından, kural uygulamasında CcToolchainInfo kodunu almak için find_cpp_toolchain(ctx) kullanın. Eksiksiz bir örnek örneği, rules_cc örneklerinde bulabilirsiniz.

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

Genellikle C++ kurallarıyla aynı entegrasyondan yararlanırsınız. Ancak bunu yapmak için C++ işlemlerini doğrudan kullanmanız gerekmez. Bunun nedeni, kendi eylemlerimizi yazarken C++ araç zinciriyle tutarlı bir şekilde davranmalarıdır. C++ komut satırının iletilmesi, perde arkasında C++ derleyicisini çağıran bir araca aktarılmasıdır.

C++ kuralları, özellik yapılandırması temelinde komut satırları oluşturmanın özel bir yolunu kullanır. Komut satırı oluşturmak için aşağıdakilere ihtiyacınız vardır:

Yine de derleyici_yürütülebilir gibi araca özgü alıcılar vardır. Araca özel alıcılar sonuç olarak kaldırılacağından bunların yerine get_tool_for_action tercih edin.

Eksiksiz bir örnek örneği, rules_cc örneklerinde bulabilirsiniz.

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

Çoğu C++ kuralı, CompilationContext ve LinkingContext içeren bir sağlayıcı olan CcInfo'i sağlar. Bu uygulamalar üzerinden bağlantı oluşturulacak tüm geçiş başlıkları veya kitaplıklar gibi bilgilere erişilebilir. CcInfo ve CcToolchainInfo özel Starlark kuralından, ihtiyaç duydukları tüm bilgilere ulaşabilmelidir.

Özel bir Starlark kuralı CcInfo sağlıyorsa bu durum, C++ kurallarına da işaret edebilir. Bu durum, C++ kurallarına da güvenebilir. Yine de dikkatli olun. CcInfo öğesini grafikte kullanan ikili kurala dağıtmanız gerekiyorsa CcInfo öğesini farklı bir sağlayıcıya sarmalayın. Örneğin, java_library kuralı, yerel bağımlılıkları java_binary özelliğine yaymak isterse doğrudan CcInfo özelliğini sağlamamalıdır (java_library öğesine bağlı olarak anlamlı değildir), örneğin JavaCcInfo öğesini sarmalamalıdır.

Eksiksiz bir örnek örneği, rules_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. En güncel bilgiler için #4570 numaralı telefonu takip edin.