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:
features
veaction_configs
. BunlarCcToolchainConfigInfo
kaynağından alınır veCcToolchainInfo
içine alınırFeatureConfiguration
- cc_common.configure_features tarafından döndürülür- cc araç zinciri yapılandırma değişkenleri: cc_common.create_der_variables veya cc_common.create_link_variables tarafından döndürülü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.