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 platformlara ve araç zincirlerine taşınması nedeniyle, hem araç zincirleri devre dışı hem de etkin durumdayken @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ç zincirini işaret eden cc_toolchain_alias
kuralının bir örneği) gösterin.
Daha sonra, kural uygulamasında find_cpp_toolchain(ctx)
işlevini kullanarak CcToolchainInfo
alın.
Eksiksiz bir çalışan örneği rules_cc örneklerinde bulunabilir.
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 sağlarsınız, ancak C++ işlemlerini doğrudan kullanmadan kullanırsınız. Bunun nedeni, kendi eylemlerimizi yazarken C++ araç zinciriyle tutarlı şekilde davranmalarıdır. Örneğin, C++ komut satırı işaretlerini perde arkasında 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 şunlar gerekir:
features
veaction_configs
- bunlarCcToolchainConfigInfo
kaynağından gelir veCcToolchainInfo
içinde kapsüllenirFeatureConfiguration
- cc_common.configure_features tarafından döndürülür- cc araç zinciri yapılandırma değişkenleri: cc_common.create_compile_variables veya cc_common.create_link_variables.
Yine de compiler_executable gibi araca özel alıcılar vardır.
Araca özel alıcılar kaldırılacağından, bunlar yerine get_tool_for_action
tercih edin.
Eksiksiz bir çalışan örneği rules_cc örneklerinde bulunabilir.
C++ kurallarına bağlı olan ve/veya C++ kurallarının bağlı olabileceği Starlark kurallarını uygulama
Çoğu C++ kuralı, CompilationContext
ve LinkingContext
kelimelerini içeren bir sağlayıcı olan CcInfo
değerini sağlar.
Bu araçlar sayesinde, bağlantı kurulacak tüm geçişli başlıklar veya kitaplıklar gibi bilgilere erişilebilir. CcInfo
ve CcToolchainInfo
özel Starlark kurallarından ihtiyaç duyulan tüm bilgileri alabilirler.
Özel bir Starlark kuralı CcInfo
değerini sağlarsa bu, C++ kurallarının ona da bağlı olabileceğini belirten bir sinyaldir. Ancak dikkatli olun. Grafikte yalnızca CcInfo
öğesini, daha sonra bu kuraldan yararlanan ikili kuralına 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
öğesine yaymak isterse doğrudan CcInfo
sağlamamalıdır (java_library
öğesine bağlı olarak cc_binary
bir anlam ifade etmez) ve sarmalamalıdır (örneğin, JavaCcInfo
).
Eksiksiz bir çalışan örneği rules_cc örneklerinde bulunabilir.
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. Güncel bilgiler için #4570 numaralı telefonu takip edin.