C++ Kurallarıyla Entegrasyon

Sorun bildir Kaynağı görüntüle Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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:

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.