Bu sayfada, çeşitli düzeylerde C++ kurallarıyla nasıl entegrasyon yapılacağı açıklanmaktadır.
C++ araç zincirine erişme
C++ kurallarının platformlara ve araç zincirlerine sürekli olarak taşınması nedeniyle, hem araç zincirleri devre dışı bırakıldığında hem de etkinleştirildiğinde çalışan @bazel_tools//tools/cpp:toolchain_utils.bzl adresinde bulunan yardımcı işlevi kullanmanız gerekir. Kuralınızda bir C++ araç zincirine bağlı kalmak için _cc_toolchain
adlı bir Label
özelliği ekleyin ve bunu @bazel_tools//tools/cpp:current_cc_toolchain
öğesine (şu anda seçili C++ araç zincirine işaret eden cc_toolchain_alias
kuralının bir örneği) yönlendirin.
Ardından, kural uygulamasında find_cpp_toolchain(ctx)
kullanarak CcToolchainInfo
kodunu alın.
Eksiksiz bir çalışan örneği kurallar_cc örneklerinde bulabilirsiniz.
C++ araç zincirini kullanarak komut satırları ve ortam değişkenleri oluşturma
Tipik olarak, C++ kurallarıyla aynı komut satırı işaretlerine sahip olmak için C++ araç zinciriyle entegrasyon yaparsınız, ancak C++ işlemlerini doğrudan kullanmadan kullanırsınız. Bunun nedeni, kendi eylemlerimizi yazarken bunların C++ araç zinciriyle tutarlı şekilde davranmalarıdır. Örneğin, C++ komut satırı işaretlerini arka planda C++ derleyiciyi çağıran bir araca iletmek gibi.
C++ kuralları, özellik yapılandırmasına dayalı olarak komut satırları oluşturmak için özel bir yöntem kullanır. Komut satırı oluşturmak için şunlara ihtiyacınız vardır:
features
veaction_configs
- bunlarCcToolchainConfigInfo
kaynağından gelir veCcToolchainInfo
içinde bulunurFeatureConfiguration
- cc_common.configure_features tarafından döndürüldü- cc_common.create_compile_variables veya cc_common.create_link_variables tarafından döndürülen cc araç zinciri yapılandırma değişkenleri.
Hala compiler_executable gibi araca özel alıcılar da vardır.
Araca özel alıcılar ileride kaldırılacağı için bunların yerine get_tool_for_action
tercih edin.
Eksiksiz bir çalışan örneği kurallar_cc örneklerinde bulabilirsiniz.
C++ kurallarına ve/veya C++ kurallarının bağlı olabileceği Starlark kurallarını uygulama
Çoğu C++ kuralı, CompilationContext
ve LinkingContext
öğelerini içeren bir sağlayıcı olan CcInfo
'i sağlar.
Bunlar aracılığıyla, bağlanacak tüm geçişli başlıklar veya kitaplıklar gibi bilgilere erişmek mümkündür. CcInfo
ve CcToolchainInfo
özel Starlark kuralları, ihtiyaçları olan tüm bilgileri alabilmelidir.
Özel bir Starlark kuralı CcInfo
sağlıyorsa C++ kuralları, bu kurala da güvenebilirler. Ancak dikkatli olun: Grafikte yalnızca CcInfo
öğesini, bu kuraldan yararlanan ikili kurala yaymanız gerekiyorsa CcInfo
öğesini farklı bir sağlayıcıya sarmalayın. Örneğin, java_library
kuralı, yerel bağımlılıkları java_binary
'a kadar yaymak istiyorsa doğrudan CcInfo
sağlamamalıdır (java_library
'e bağlı olarak cc_binary
anlamlı değildir) ve örneğin JavaCcInfo
içine alması gerekir.
Eksiksiz bir çalışan örneği 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. En güncel bilgiler için #4570 adresini takip edin.