Bu sayfada, çeşitli düzeylerde C++ kurallarıyla nasıl entegrasyon yapılacağı açıklanmaktadır.
C++ araç zincirine erişme
Devam eden C++ kurallarının platformlara ve araç zincirlerine taşınması nedeniyle, @bazel_tools//tools/cpp:toolchain_utils.bzl adresinde bulunan yardımcı işlevi kullanmanız gerekir. Bu işlev, araç zincirleri devre dışı bırakıldığında ve etkinleştirildiğinde çalışır. Kuralınızda bir C++
araç zincirine bağlı olmak için Label
adlı bir _cc_toolchain
özelliği ekleyin ve bunu @bazel_tools//tools/cpp:current_cc_toolchain
'e (şu anda seçili C++ araç zincirine işaret eden bir cc_toolchain_alias
kuralı örneği) yönlendirin.
Ardından, kural uygulamasında find_cpp_toolchain(ctx)
kullanarak CcToolchainInfo
elde edin.
Çalışan bir örneğin tamamını rules_cc örneklerinde bulabilirsiniz.
C++ araç zincirini kullanarak komut satırları ve ortam değişkenleri oluşturma
Genellikle, 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 kullanmazsınız. Bunun nedeni, kendi işlemlerimizi yazarken C++ araç zinciriyle tutarlı davranmaları gerektiğidir. Örneğin, C++ komut satırı işaretlerini arka planda C++ derleyicisini çağıran bir araca iletmek.
C++ kuralları, özellik yapılandırmasına dayalı olarak komut satırları oluşturmak için özel bir yöntem kullanır. Bir komut satırı oluşturmak için aşağıdakilere ihtiyacınız vardır:
features
veaction_configs
: BunlarCcToolchainConfigInfo
kaynağından gelir veCcToolchainInfo
içinde kapsüllenir.FeatureConfiguration
- cc_common.configure_features tarafından döndürülür.- cc toolchain config variables - returned by cc_common.create_compile_variables or cc_common.create_link_variables.
compiler_executable gibi araca özgü alıcılar hâlâ vardır.
Araca özgü alıcılar sonunda kaldırılacağından get_tool_for_action
bu alıcılara tercih edin.
Çalışan bir örneğin tamamını rules_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
ve LinkingContext
içeren bir sağlayıcı sunar.
Bunlar aracılığıyla, tüm geçişli başlıklar veya bağlanacak kitaplıklar gibi bilgilere erişmek mümkündür. CcInfo
ve CcToolchainInfo
özel Starlark kuralları, ihtiyaç duydukları tüm bilgilere erişebilmelidir.
Özel bir Starlark kuralı CcInfo
sağlıyorsa bu, C++ kuralları için de buna bağlı olabilecekleri anlamına gelir. Ancak dikkatli olun. CcInfo
öğesini yalnızca grafikte, onu kullanan 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
'ye kadar yaymak istiyorsa doğrudan CcInfo
sağlamamalıdır (cc_binary
, java_library
'ya bağlı olması mantıklı değildir). Bunun yerine, örneğin JavaCcInfo
içine sarmalıdır.
Çalışan bir örneğin tamamını 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. Güncel bilgiler için #4570'i takip edin.