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:
features
veaction_configs
- BunlarCcToolchainConfigInfo
kaynaklı 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 - tarafından döndürülen cc_common.create_compile_variables veya cc_common.create_link_variables.
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.